vite-plugin-react-server 1.2.0-alpha.0 → 1.2.0
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 +211 -59
- package/dist/client.d.ts +4 -0
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +4 -4
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -10
- package/dist/package.json +102 -27
- package/dist/plugin/bundle/bundles.d.ts +11 -0
- package/dist/plugin/bundle/bundles.d.ts.map +1 -0
- package/dist/plugin/bundle/bundles.js +11 -0
- package/dist/plugin/bundle/deferredStaticGeneration.d.ts +31 -0
- package/dist/plugin/bundle/deferredStaticGeneration.d.ts.map +1 -0
- package/dist/plugin/bundle/deferredStaticGeneration.js +44 -0
- package/dist/plugin/bundle/manifests.d.ts +20 -0
- package/dist/plugin/bundle/manifests.d.ts.map +1 -0
- package/dist/plugin/bundle/manifests.js +54 -0
- package/dist/plugin/components/css.d.ts +2 -5
- package/dist/plugin/components/css.d.ts.map +1 -1
- package/dist/plugin/components/css.js +7 -9
- package/dist/plugin/components/html.d.ts +2 -3
- package/dist/plugin/components/html.d.ts.map +1 -1
- package/dist/plugin/components/html.js +3 -3
- package/dist/plugin/components/index.d.ts +1 -1
- package/dist/plugin/components/index.d.ts.map +1 -1
- package/dist/plugin/components/root.d.ts.map +1 -1
- package/dist/plugin/components/root.js +4 -4
- package/dist/plugin/config/autoDiscover/createGlobAutoDiscover.d.ts.map +1 -1
- package/dist/plugin/config/autoDiscover/createGlobAutoDiscover.js +6 -6
- package/dist/plugin/config/autoDiscover/pageAndPropFiles.d.ts.map +1 -1
- package/dist/plugin/config/autoDiscover/pageAndPropFiles.js +1 -1
- package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts +6 -5
- package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts.map +1 -1
- package/dist/plugin/config/autoDiscover/resolveAutoDiscover.js +34 -51
- package/dist/plugin/config/autoDiscover/resolveBuildPages.d.ts +5 -1
- package/dist/plugin/config/autoDiscover/resolveBuildPages.d.ts.map +1 -1
- package/dist/plugin/config/autoDiscover/resolveBuildPages.js +124 -52
- package/dist/plugin/config/createHandlerOptions.client.d.ts +4 -0
- package/dist/plugin/config/createHandlerOptions.client.d.ts.map +1 -0
- package/dist/plugin/config/createHandlerOptions.client.js +293 -0
- package/dist/plugin/config/createHandlerOptions.d.ts +4 -0
- package/dist/plugin/config/createHandlerOptions.d.ts.map +1 -0
- package/dist/plugin/config/createHandlerOptions.js +13 -0
- package/dist/plugin/config/createHandlerOptions.server.d.ts +4 -0
- package/dist/plugin/config/createHandlerOptions.server.d.ts.map +1 -0
- package/dist/plugin/config/createHandlerOptions.server.js +344 -0
- package/dist/plugin/config/createHandlerOptions.types.d.ts +114 -0
- package/dist/plugin/config/createHandlerOptions.types.d.ts.map +1 -0
- package/dist/plugin/config/createModuleID.d.ts +1 -1
- package/dist/plugin/config/createModuleID.d.ts.map +1 -1
- package/dist/plugin/config/createModuleID.js +121 -8
- package/dist/plugin/config/defaults.d.ts +152 -17
- package/dist/plugin/config/defaults.d.ts.map +1 -1
- package/dist/plugin/config/defaults.js +69 -25
- package/dist/plugin/config/envPrefixFromConfig.d.ts +3 -0
- package/dist/plugin/config/envPrefixFromConfig.d.ts.map +1 -0
- package/dist/plugin/config/envPrefixFromConfig.js +8 -0
- package/dist/plugin/config/getCondition.d.ts +54 -3
- package/dist/plugin/config/getCondition.d.ts.map +1 -1
- package/dist/plugin/config/getCondition.js +158 -6
- package/dist/plugin/{getNodeEnv.d.ts → config/getNodeEnv.d.ts} +1 -1
- package/dist/plugin/config/getNodeEnv.d.ts.map +1 -0
- package/dist/plugin/config/getNodeEnv.js +17 -0
- package/dist/plugin/config/index.d.ts +43 -1
- package/dist/plugin/config/index.d.ts.map +1 -1
- package/dist/plugin/config/index.js +9 -4
- package/dist/plugin/config/resolveDirectiveMatcher.d.ts +6 -6
- package/dist/plugin/config/resolveDirectiveMatcher.d.ts.map +1 -1
- package/dist/plugin/config/resolveDirectiveMatcher.js +7 -23
- package/dist/plugin/config/resolveEnv.d.ts +1 -1
- package/dist/plugin/config/resolveEnv.d.ts.map +1 -1
- package/dist/plugin/config/resolveEnv.js +32 -28
- package/dist/plugin/config/resolveOptions.d.ts +3 -2
- package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
- package/dist/plugin/config/resolveOptions.js +195 -61
- package/dist/plugin/config/resolvePages.d.ts +1 -1
- package/dist/plugin/config/resolvePages.d.ts.map +1 -1
- package/dist/plugin/config/resolvePages.js +1 -1
- package/dist/plugin/config/resolvePatternWithValues.d.ts.map +1 -1
- package/dist/plugin/config/resolvePatternWithValues.js +7 -26
- package/dist/plugin/config/resolveUrlOption.d.ts +1 -1
- package/dist/plugin/config/resolveUrlOption.d.ts.map +1 -1
- package/dist/plugin/config/resolveUrlOption.js +2 -2
- package/dist/plugin/config/resolveUserConfig.d.ts +5 -3
- package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
- package/dist/plugin/config/resolveUserConfig.js +221 -70
- package/dist/plugin/config/stashedOptionsState.d.ts +66 -0
- package/dist/plugin/config/stashedOptionsState.d.ts.map +1 -0
- package/dist/plugin/config/stashedOptionsState.js +25 -0
- package/dist/plugin/dev-server/cleanupServerAction.client.d.ts +6 -0
- package/dist/plugin/dev-server/cleanupServerAction.client.d.ts.map +1 -0
- package/dist/plugin/dev-server/cleanupServerAction.client.js +28 -0
- package/dist/plugin/dev-server/cleanupServerAction.d.ts +2 -0
- package/dist/plugin/dev-server/cleanupServerAction.d.ts.map +1 -0
- package/dist/plugin/dev-server/cleanupServerAction.js +4 -0
- package/dist/plugin/dev-server/cleanupServerAction.server.d.ts +8 -0
- package/dist/plugin/dev-server/cleanupServerAction.server.d.ts.map +1 -0
- package/dist/plugin/dev-server/cleanupServerAction.server.js +15 -0
- package/dist/plugin/dev-server/configureReactServer.client.d.ts +7 -0
- package/dist/plugin/dev-server/configureReactServer.client.d.ts.map +1 -0
- package/dist/plugin/dev-server/configureReactServer.client.js +85 -0
- package/dist/plugin/dev-server/configureReactServer.d.ts +2 -0
- package/dist/plugin/dev-server/configureReactServer.d.ts.map +1 -0
- package/dist/plugin/dev-server/configureReactServer.js +13 -0
- package/dist/plugin/dev-server/configureReactServer.server.d.ts +3 -0
- package/dist/plugin/dev-server/configureReactServer.server.d.ts.map +1 -0
- package/dist/plugin/dev-server/configureReactServer.server.js +444 -0
- package/dist/plugin/dev-server/configureRequestHandler.client.d.ts +13 -0
- package/dist/plugin/dev-server/configureRequestHandler.client.d.ts.map +1 -0
- package/dist/plugin/dev-server/configureRequestHandler.client.js +307 -0
- package/dist/plugin/dev-server/configureRequestHandler.d.ts +2 -0
- package/dist/plugin/dev-server/configureRequestHandler.d.ts.map +1 -0
- package/dist/plugin/dev-server/configureRequestHandler.js +4 -0
- package/dist/plugin/dev-server/configureRequestHandler.server.d.ts +6 -0
- package/dist/plugin/dev-server/configureRequestHandler.server.d.ts.map +1 -0
- package/dist/plugin/dev-server/configureRequestHandler.server.js +44 -0
- package/dist/plugin/dev-server/handleServerAction.client.d.ts +11 -0
- package/dist/plugin/dev-server/handleServerAction.client.d.ts.map +1 -0
- package/dist/plugin/dev-server/handleServerAction.client.js +97 -0
- package/dist/plugin/dev-server/handleServerAction.d.ts +2 -0
- package/dist/plugin/dev-server/handleServerAction.d.ts.map +1 -0
- package/dist/plugin/dev-server/handleServerAction.js +13 -0
- package/dist/plugin/dev-server/handleServerAction.server.d.ts +3 -0
- package/dist/plugin/dev-server/handleServerAction.server.d.ts.map +1 -0
- package/dist/plugin/dev-server/handleServerAction.server.js +15 -0
- package/dist/plugin/dev-server/index.client.d.ts +7 -0
- package/dist/plugin/dev-server/index.client.d.ts.map +1 -0
- package/dist/plugin/dev-server/index.client.js +11 -0
- package/dist/plugin/dev-server/index.d.ts +4 -0
- package/dist/plugin/dev-server/index.d.ts.map +1 -0
- package/dist/plugin/dev-server/index.js +19 -0
- package/dist/plugin/dev-server/index.server.d.ts +7 -0
- package/dist/plugin/dev-server/index.server.d.ts.map +1 -0
- package/dist/plugin/dev-server/index.server.js +11 -0
- package/dist/plugin/dev-server/plugin.client.d.ts +7 -0
- package/dist/plugin/dev-server/plugin.client.d.ts.map +1 -0
- package/dist/plugin/dev-server/plugin.client.js +122 -0
- package/dist/plugin/dev-server/plugin.server.d.ts +8 -0
- package/dist/plugin/dev-server/plugin.server.d.ts.map +1 -0
- package/dist/plugin/dev-server/plugin.server.js +108 -0
- package/dist/plugin/dev-server/restartWorker.client.d.ts +3 -0
- package/dist/plugin/dev-server/restartWorker.client.d.ts.map +1 -0
- package/dist/plugin/dev-server/restartWorker.client.js +131 -0
- package/dist/plugin/dev-server/restartWorker.d.ts +2 -0
- package/dist/plugin/dev-server/restartWorker.d.ts.map +1 -0
- package/dist/plugin/dev-server/restartWorker.js +4 -0
- package/dist/plugin/dev-server/restartWorker.server.d.ts +3 -0
- package/dist/plugin/dev-server/restartWorker.server.d.ts.map +1 -0
- package/dist/plugin/dev-server/restartWorker.server.js +88 -0
- package/dist/plugin/dev-server/types.d.ts +38 -0
- package/dist/plugin/dev-server/types.d.ts.map +1 -0
- package/dist/plugin/dev-server/virtualRscHmrPlugin.d.ts +7 -0
- package/dist/plugin/dev-server/virtualRscHmrPlugin.d.ts.map +1 -0
- package/dist/plugin/dev-server/virtualRscHmrPlugin.js +80 -0
- package/dist/plugin/env/createConfigEnv.d.ts +13 -0
- package/dist/plugin/env/createConfigEnv.d.ts.map +1 -0
- package/dist/plugin/env/createConfigEnv.js +43 -0
- package/dist/plugin/env/createEnvPlugin.d.ts +3 -0
- package/dist/plugin/env/createEnvPlugin.d.ts.map +1 -0
- package/dist/plugin/env/createEnvPlugin.js +59 -0
- package/dist/plugin/env/getArgValue.d.ts +8 -0
- package/dist/plugin/env/getArgValue.d.ts.map +1 -0
- package/dist/plugin/env/getArgValue.js +52 -0
- package/dist/plugin/env/getEnvKey.d.ts +46 -0
- package/dist/plugin/env/getEnvKey.d.ts.map +1 -0
- package/dist/plugin/env/getEnvKey.js +32 -0
- package/dist/plugin/env/index.d.ts +5 -0
- package/dist/plugin/env/index.d.ts.map +1 -1
- package/dist/plugin/env/index.js +7 -0
- package/dist/plugin/env/plugin.client.d.ts +2 -0
- package/dist/plugin/env/plugin.client.d.ts.map +1 -0
- package/dist/plugin/env/plugin.client.js +2 -0
- package/dist/plugin/env/plugin.d.ts +4 -34
- package/dist/plugin/env/plugin.d.ts.map +1 -1
- package/dist/plugin/env/plugin.js +27 -102
- package/dist/plugin/env/plugin.server.d.ts +2 -0
- package/dist/plugin/env/plugin.server.d.ts.map +1 -0
- package/dist/plugin/env/plugin.server.js +2 -0
- package/dist/plugin/env/userConfigEnv.d.ts +2 -0
- package/dist/plugin/env/userConfigEnv.d.ts.map +1 -0
- package/dist/plugin/env/userConfigEnv.js +12 -0
- package/dist/plugin/environments/createBuildEventPlugin.d.ts +4 -0
- package/dist/plugin/environments/createBuildEventPlugin.d.ts.map +1 -0
- package/dist/plugin/environments/createBuildEventPlugin.js +100 -0
- package/dist/plugin/environments/createEnvironmentPlugin.d.ts +19 -0
- package/dist/plugin/environments/createEnvironmentPlugin.d.ts.map +1 -0
- package/dist/plugin/environments/createEnvironmentPlugin.js +257 -0
- package/dist/plugin/environments/hashCoordination.d.ts +14 -0
- package/dist/plugin/environments/hashCoordination.d.ts.map +1 -0
- package/dist/plugin/environments/hashCoordination.js +35 -0
- package/dist/plugin/environments/resolveEnvironmentConfig.d.ts +41 -0
- package/dist/plugin/environments/resolveEnvironmentConfig.d.ts.map +1 -0
- package/dist/plugin/environments/resolveEnvironmentConfig.js +232 -0
- package/dist/plugin/error/assertPanic.d.ts +2 -0
- package/dist/plugin/error/assertPanic.d.ts.map +1 -0
- package/dist/plugin/error/assertPanic.js +15 -0
- package/dist/plugin/error/handleError.d.ts +9 -0
- package/dist/plugin/error/handleError.d.ts.map +1 -0
- package/dist/plugin/error/handleError.js +51 -0
- package/dist/plugin/error/index.d.ts +3 -0
- package/dist/plugin/error/index.d.ts.map +1 -1
- package/dist/plugin/error/index.js +4 -1
- package/dist/plugin/error/logError.d.ts +6 -2
- package/dist/plugin/error/logError.d.ts.map +1 -1
- package/dist/plugin/error/logError.js +35 -34
- package/dist/plugin/error/panicThresholdHandler.d.ts +27 -0
- package/dist/plugin/error/panicThresholdHandler.d.ts.map +1 -0
- package/dist/plugin/error/panicThresholdHandler.js +13 -0
- package/dist/plugin/error/serializeError.d.ts +6 -2
- package/dist/plugin/error/serializeError.d.ts.map +1 -1
- package/dist/plugin/error/serializeError.js +30 -10
- package/dist/plugin/error/serializeErrorInfo.d.ts +5 -0
- package/dist/plugin/error/serializeErrorInfo.d.ts.map +1 -0
- package/dist/plugin/error/serializeErrorInfo.js +19 -0
- package/dist/plugin/error/setupGlobalErrorHandler.d.ts +4 -0
- package/dist/plugin/error/setupGlobalErrorHandler.d.ts.map +1 -0
- package/dist/plugin/error/setupGlobalErrorHandler.js +52 -0
- package/dist/plugin/error/shouldPanic.d.ts +6 -0
- package/dist/plugin/error/shouldPanic.d.ts.map +1 -0
- package/dist/plugin/error/shouldPanic.js +15 -0
- package/dist/plugin/error/toError.d.ts +5 -1
- package/dist/plugin/error/toError.d.ts.map +1 -1
- package/dist/plugin/error/toError.js +43 -19
- package/dist/plugin/error/types.d.ts +28 -0
- package/dist/plugin/error/types.d.ts.map +1 -0
- package/dist/plugin/helpers/collectManifestCss.d.ts.map +1 -1
- package/dist/plugin/helpers/collectManifestCss.js +19 -5
- package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts +3 -3
- package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts.map +1 -1
- package/dist/plugin/helpers/collectViteModuleGraphCss.js +64 -3
- package/dist/plugin/helpers/createBufferedRscStream.d.ts +52 -0
- package/dist/plugin/helpers/createBufferedRscStream.d.ts.map +1 -0
- package/dist/plugin/helpers/createBufferedRscStream.js +147 -0
- package/dist/plugin/helpers/createCssProps.d.ts.map +1 -1
- package/dist/plugin/helpers/createCssProps.js +15 -25
- package/dist/plugin/helpers/createElementWithReact.d.ts +9 -0
- package/dist/plugin/helpers/createElementWithReact.d.ts.map +1 -0
- package/dist/plugin/helpers/createElementWithReact.js +87 -0
- package/dist/plugin/helpers/createPatternMatcher.d.ts +24 -0
- package/dist/plugin/helpers/createPatternMatcher.d.ts.map +1 -0
- package/dist/plugin/helpers/createPatternMatcher.js +50 -0
- package/dist/plugin/helpers/createRscRenderHelpers.d.ts +16 -0
- package/dist/plugin/helpers/createRscRenderHelpers.d.ts.map +1 -0
- package/dist/plugin/helpers/createRscRenderHelpers.js +60 -0
- package/dist/plugin/helpers/createSafePageComponent.d.ts +36 -0
- package/dist/plugin/helpers/createSafePageComponent.d.ts.map +1 -0
- package/dist/plugin/helpers/createSafePageComponent.js +50 -0
- package/dist/plugin/helpers/createSerializableHandlerOptions.d.ts +60 -0
- package/dist/plugin/helpers/createSerializableHandlerOptions.d.ts.map +1 -0
- package/dist/plugin/helpers/createSerializableHandlerOptions.js +94 -0
- package/dist/plugin/helpers/createSharedLoader.d.ts +44 -0
- package/dist/plugin/helpers/createSharedLoader.d.ts.map +1 -0
- package/dist/plugin/helpers/createSharedLoader.js +137 -0
- package/dist/plugin/helpers/createUnifiedCssProcessor.d.ts +70 -0
- package/dist/plugin/helpers/createUnifiedCssProcessor.d.ts.map +1 -0
- package/dist/plugin/helpers/createUnifiedCssProcessor.js +89 -0
- package/dist/plugin/helpers/getBundleManifest.d.ts.map +1 -1
- package/dist/plugin/helpers/getBundleManifest.js +2 -3
- package/dist/plugin/helpers/getRouteFiles.d.ts +2 -2
- package/dist/plugin/helpers/getRouteFiles.d.ts.map +1 -1
- package/dist/plugin/helpers/getRouteFiles.js +67 -36
- package/dist/plugin/helpers/handleServerAction.client.d.ts +29 -0
- package/dist/plugin/helpers/handleServerAction.client.d.ts.map +1 -0
- package/dist/plugin/helpers/handleServerAction.client.js +93 -0
- package/dist/plugin/helpers/handleServerAction.d.ts +2 -34
- package/dist/plugin/helpers/handleServerAction.d.ts.map +1 -1
- package/dist/plugin/helpers/handleServerAction.js +15 -44
- package/dist/plugin/helpers/handleServerAction.server.d.ts +25 -0
- package/dist/plugin/helpers/handleServerAction.server.d.ts.map +1 -0
- package/dist/plugin/helpers/handleServerAction.server.js +80 -0
- package/dist/plugin/helpers/handleServerActionHelper.d.ts +61 -0
- package/dist/plugin/helpers/handleServerActionHelper.d.ts.map +1 -0
- package/dist/plugin/helpers/handleServerActionHelper.js +183 -0
- package/dist/plugin/helpers/headlessStreamReuseHandler.d.ts +12 -0
- package/dist/plugin/helpers/headlessStreamReuseHandler.d.ts.map +1 -0
- package/dist/plugin/helpers/headlessStreamReuseHandler.js +29 -0
- package/dist/plugin/helpers/headlessStreamState.d.ts +71 -0
- package/dist/plugin/helpers/headlessStreamState.d.ts.map +1 -0
- package/dist/plugin/helpers/headlessStreamState.js +81 -0
- package/dist/plugin/helpers/hydrateUserOptions.d.ts +1 -1
- package/dist/plugin/helpers/hydrateUserOptions.d.ts.map +1 -1
- package/dist/plugin/helpers/hydrateUserOptions.js +2 -2
- package/dist/plugin/helpers/index.d.ts +12 -5
- package/dist/plugin/helpers/index.d.ts.map +1 -1
- package/dist/plugin/helpers/index.js +18 -4
- package/dist/plugin/helpers/logRenderStart.d.ts +17 -0
- package/dist/plugin/helpers/logRenderStart.d.ts.map +1 -0
- package/dist/plugin/helpers/logRenderStart.js +13 -0
- package/dist/plugin/helpers/mergeMessageWithDefaults.d.ts +90 -0
- package/dist/plugin/helpers/mergeMessageWithDefaults.d.ts.map +1 -0
- package/dist/plugin/helpers/mergeMessageWithDefaults.js +67 -0
- package/dist/plugin/helpers/pipeToResponse.d.ts +19 -0
- package/dist/plugin/helpers/pipeToResponse.d.ts.map +1 -0
- package/dist/plugin/helpers/pipeToResponse.js +55 -0
- package/dist/plugin/helpers/requestInfo.d.ts +6 -4
- package/dist/plugin/helpers/requestInfo.d.ts.map +1 -1
- package/dist/plugin/helpers/requestInfo.js +48 -30
- package/dist/plugin/helpers/resolveComponents.client.d.ts +34 -0
- package/dist/plugin/helpers/resolveComponents.client.d.ts.map +1 -0
- package/dist/plugin/helpers/resolveComponents.client.js +126 -0
- package/dist/plugin/helpers/resolveModuleFromManifest.d.ts +36 -0
- package/dist/plugin/helpers/resolveModuleFromManifest.d.ts.map +1 -0
- package/dist/plugin/helpers/resolveModuleFromManifest.js +60 -0
- package/dist/plugin/helpers/resolvePageAndProps.d.ts +23 -2
- package/dist/plugin/helpers/resolvePageAndProps.d.ts.map +1 -1
- package/dist/plugin/helpers/resolvePageAndProps.js +150 -9
- package/dist/plugin/helpers/resolveRenderUrl.d.ts +11 -0
- package/dist/plugin/helpers/resolveRenderUrl.d.ts.map +1 -0
- package/dist/plugin/helpers/resolveRenderUrl.js +19 -0
- package/dist/plugin/helpers/resolveStreamElements.client.d.ts +14 -0
- package/dist/plugin/helpers/resolveStreamElements.client.d.ts.map +1 -0
- package/dist/plugin/helpers/resolveStreamElements.client.js +36 -0
- package/dist/plugin/helpers/resolveStreamElements.d.ts +3 -0
- package/dist/plugin/helpers/resolveStreamElements.d.ts.map +1 -0
- package/dist/plugin/helpers/resolveStreamElements.js +13 -0
- package/dist/plugin/helpers/resolveStreamElements.server.d.ts +15 -0
- package/dist/plugin/helpers/resolveStreamElements.server.d.ts.map +1 -0
- package/dist/plugin/helpers/resolveStreamElements.server.js +35 -0
- package/dist/plugin/helpers/resolveStreamElements.types.d.ts +22 -0
- package/dist/plugin/helpers/resolveStreamElements.types.d.ts.map +1 -0
- package/dist/plugin/helpers/resolveStreamElements.types.js +1 -0
- package/dist/plugin/helpers/resolveVirtualAndNodeModules.d.ts +15 -0
- package/dist/plugin/helpers/resolveVirtualAndNodeModules.d.ts.map +1 -0
- package/dist/plugin/helpers/resolveVirtualAndNodeModules.js +45 -0
- package/dist/plugin/helpers/resolveWithDefaultRootAndHtml.d.ts +18 -0
- package/dist/plugin/helpers/resolveWithDefaultRootAndHtml.d.ts.map +1 -0
- package/dist/plugin/helpers/resolveWithDefaultRootAndHtml.js +17 -0
- package/dist/plugin/helpers/serializeUserOptions.d.ts +2 -2
- package/dist/plugin/helpers/serializeUserOptions.d.ts.map +1 -1
- package/dist/plugin/helpers/serializeUserOptions.js +28 -13
- package/dist/plugin/helpers/tryManifest.d.ts +2 -2
- package/dist/plugin/helpers/tryManifest.d.ts.map +1 -1
- package/dist/plugin/helpers/tryManifest.js +12 -6
- package/dist/plugin/helpers/validateRscRenderMessage.d.ts +9 -0
- package/dist/plugin/helpers/validateRscRenderMessage.d.ts.map +1 -0
- package/dist/plugin/helpers/validateRscRenderMessage.js +13 -0
- package/dist/plugin/helpers/workerCleanup.d.ts +29 -0
- package/dist/plugin/helpers/workerCleanup.d.ts.map +1 -0
- package/dist/plugin/helpers/workerCleanup.js +28 -0
- package/dist/plugin/helpers/workerManager.d.ts +5 -0
- package/dist/plugin/helpers/workerManager.d.ts.map +1 -0
- package/dist/plugin/helpers/workerManager.js +18 -0
- package/dist/plugin/index.d.ts +4 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +5 -2
- package/dist/plugin/loader/createDefaultLoader.d.ts +1 -1
- package/dist/plugin/loader/createDefaultLoader.d.ts.map +1 -1
- package/dist/plugin/loader/createDefaultLoader.js +2 -22
- package/dist/plugin/loader/createTransformer.d.ts.map +1 -1
- package/dist/plugin/loader/createTransformer.js +157 -32
- package/dist/plugin/loader/directives/analyzeDirectives.d.ts +3 -2
- package/dist/plugin/loader/directives/analyzeDirectives.d.ts.map +1 -1
- package/dist/plugin/loader/directives/analyzeDirectives.js +53 -26
- package/dist/plugin/loader/directives/analyzeModule.d.ts +2 -6
- package/dist/plugin/loader/directives/analyzeModule.d.ts.map +1 -1
- package/dist/plugin/loader/directives/analyzeModule.js +32 -11
- package/dist/plugin/loader/env-loader.d.ts +3 -2
- package/dist/plugin/loader/env-loader.d.ts.map +1 -1
- package/dist/plugin/loader/env-loader.js +32 -9
- package/dist/plugin/loader/parse.d.ts +3 -2
- package/dist/plugin/loader/parse.d.ts.map +1 -1
- package/dist/plugin/loader/parse.js +2 -2
- package/dist/plugin/loader/react-loader.d.ts +4 -4
- package/dist/plugin/loader/react-loader.d.ts.map +1 -1
- package/dist/plugin/loader/react-loader.js +101 -73
- package/dist/plugin/loader/transformClientModule.d.ts +4 -5
- package/dist/plugin/loader/transformClientModule.d.ts.map +1 -1
- package/dist/plugin/loader/transformClientModule.js +63 -18
- package/dist/plugin/loader/transformModule.d.ts.map +1 -1
- package/dist/plugin/loader/transformModule.js +82 -14
- package/dist/plugin/loader/transformModuleIfNeeded.d.ts +6 -1
- package/dist/plugin/loader/transformModuleIfNeeded.d.ts.map +1 -1
- package/dist/plugin/loader/transformModuleIfNeeded.js +10 -18
- package/dist/plugin/loader/transformNonServerEnvironment.d.ts +10 -0
- package/dist/plugin/loader/transformNonServerEnvironment.d.ts.map +1 -0
- package/dist/plugin/loader/transformNonServerEnvironment.js +74 -0
- package/dist/plugin/loader/transformServerModule.d.ts +2 -3
- package/dist/plugin/loader/transformServerModule.d.ts.map +1 -1
- package/dist/plugin/loader/transformServerModule.js +80 -22
- package/dist/plugin/loader/transformWithAcornLoose.js +1 -3
- package/dist/plugin/loader/types.d.ts +37 -32
- package/dist/plugin/loader/types.d.ts.map +1 -1
- package/dist/plugin/metrics/collectStreamMetrics.d.ts +1 -2
- package/dist/plugin/metrics/collectStreamMetrics.d.ts.map +1 -1
- package/dist/plugin/metrics/collectStreamMetrics.js +1 -1
- package/dist/plugin/metrics/convertStreamMetrics.d.ts +3 -0
- package/dist/plugin/metrics/convertStreamMetrics.d.ts.map +1 -0
- package/dist/plugin/metrics/convertStreamMetrics.js +26 -0
- package/dist/plugin/metrics/createModuleResolutionMetrics.d.ts +12 -0
- package/dist/plugin/metrics/createModuleResolutionMetrics.d.ts.map +1 -0
- package/dist/plugin/metrics/createModuleResolutionMetrics.js +32 -0
- package/dist/plugin/metrics/createRenderMetrics.d.ts +2 -2
- package/dist/plugin/metrics/createRenderMetrics.d.ts.map +1 -1
- package/dist/plugin/metrics/createRenderMetrics.js +45 -13
- package/dist/plugin/metrics/createStreamMetrics.d.ts +2 -2
- package/dist/plugin/metrics/createStreamMetrics.d.ts.map +1 -1
- package/dist/plugin/metrics/createStreamMetrics.js +15 -4
- package/dist/plugin/metrics/createWorkerStartupMetrics.d.ts +12 -0
- package/dist/plugin/metrics/createWorkerStartupMetrics.d.ts.map +1 -0
- package/dist/plugin/metrics/createWorkerStartupMetrics.js +14 -0
- package/dist/plugin/metrics/formatMetrics.d.ts +0 -6
- package/dist/plugin/metrics/formatMetrics.d.ts.map +1 -1
- package/dist/plugin/metrics/formatMetrics.js +7 -29
- package/dist/plugin/metrics/index.d.ts +6 -3
- package/dist/plugin/metrics/index.d.ts.map +1 -1
- package/dist/plugin/metrics/index.js +6 -3
- package/dist/plugin/metrics/metricWatcher.d.ts +9 -0
- package/dist/plugin/metrics/metricWatcher.d.ts.map +1 -0
- package/dist/plugin/metrics/metricWatcher.js +141 -0
- package/dist/plugin/metrics/types.d.ts +72 -6
- package/dist/plugin/metrics/types.d.ts.map +1 -1
- package/dist/plugin/orchestrator/createPluginOrchestrator.client.d.ts +3 -0
- package/dist/plugin/orchestrator/createPluginOrchestrator.client.d.ts.map +1 -0
- package/dist/plugin/orchestrator/createPluginOrchestrator.client.js +36 -0
- package/dist/plugin/orchestrator/createPluginOrchestrator.d.ts +19 -0
- package/dist/plugin/orchestrator/createPluginOrchestrator.d.ts.map +1 -0
- package/dist/plugin/orchestrator/createPluginOrchestrator.js +13 -0
- package/dist/plugin/orchestrator/createPluginOrchestrator.server.d.ts +3 -0
- package/dist/plugin/orchestrator/createPluginOrchestrator.server.d.ts.map +1 -0
- package/dist/plugin/orchestrator/createPluginOrchestrator.server.js +44 -0
- package/dist/plugin/orchestrator/index.d.ts +2 -0
- package/dist/plugin/orchestrator/index.d.ts.map +1 -0
- package/dist/plugin/orchestrator/index.js +1 -0
- package/dist/plugin/orchestrator/plugin.js +7 -0
- package/dist/plugin/orchestrator/resolveStrategy.d.ts +19 -0
- package/dist/plugin/orchestrator/resolveStrategy.d.ts.map +1 -0
- package/dist/plugin/orchestrator/resolveStrategy.js +35 -0
- package/dist/plugin/orchestrator/types.d.ts +21 -0
- package/dist/plugin/orchestrator/types.d.ts.map +1 -0
- package/dist/plugin/orchestrator/types.js +1 -0
- package/dist/plugin/plugin.client.d.ts +11 -19
- package/dist/plugin/plugin.client.d.ts.map +1 -1
- package/dist/plugin/plugin.client.js +28 -29
- package/dist/plugin/plugin.d.ts +2 -1
- package/dist/plugin/plugin.d.ts.map +1 -1
- package/dist/plugin/plugin.js +4 -2
- package/dist/plugin/plugin.server.d.ts +13 -11
- package/dist/plugin/plugin.server.d.ts.map +1 -1
- package/dist/plugin/plugin.server.js +19 -22
- package/dist/plugin/process-env.d.ts +19 -6
- package/dist/plugin/process-env.d.ts.map +1 -1
- package/dist/plugin/process-env.js +17 -0
- package/dist/plugin/react-client/createMessageHandlers.d.ts +2 -10
- package/dist/plugin/react-client/createMessageHandlers.d.ts.map +1 -1
- package/dist/plugin/react-client/createMessageHandlers.js +42 -69
- package/dist/plugin/react-client/index.client.d.ts +2 -0
- package/dist/plugin/react-client/index.client.d.ts.map +1 -0
- package/dist/plugin/react-client/index.client.js +1 -0
- package/dist/plugin/react-client/index.d.ts +3 -4
- package/dist/plugin/react-client/index.d.ts.map +1 -1
- package/dist/plugin/react-client/index.js +10 -5
- package/dist/plugin/react-client/index.server.d.ts +2 -0
- package/dist/plugin/react-client/index.server.d.ts.map +1 -0
- package/dist/plugin/react-client/index.server.js +1 -0
- package/dist/plugin/react-client/plugin.client.d.ts +15 -0
- package/dist/plugin/react-client/plugin.client.d.ts.map +1 -0
- package/dist/plugin/react-client/plugin.client.js +98 -0
- package/dist/plugin/react-client/plugin.d.ts +2 -5
- package/dist/plugin/react-client/plugin.d.ts.map +1 -1
- package/dist/plugin/react-client/plugin.js +6 -121
- package/dist/plugin/react-client/plugin.server.d.ts +15 -0
- package/dist/plugin/react-client/plugin.server.d.ts.map +1 -0
- package/dist/plugin/react-client/plugin.server.js +93 -0
- package/dist/plugin/react-client/types.d.ts +60 -0
- package/dist/plugin/react-client/types.d.ts.map +1 -0
- package/dist/plugin/react-client/types.js +1 -0
- package/dist/plugin/react-server/index.client.d.ts +2 -0
- package/dist/plugin/react-server/index.client.d.ts.map +1 -0
- package/dist/plugin/react-server/index.client.js +1 -0
- package/dist/plugin/react-server/index.d.ts +3 -1
- package/dist/plugin/react-server/index.d.ts.map +1 -1
- package/dist/plugin/react-server/index.js +13 -1
- package/dist/plugin/react-server/index.server.d.ts +2 -0
- package/dist/plugin/react-server/index.server.d.ts.map +1 -0
- package/dist/plugin/react-server/index.server.js +1 -0
- package/dist/plugin/react-server/plugin.client.d.ts +3 -0
- package/dist/plugin/react-server/plugin.client.d.ts.map +1 -0
- package/dist/plugin/react-server/plugin.client.js +40 -0
- package/dist/plugin/react-server/plugin.d.ts +2 -5
- package/dist/plugin/react-server/plugin.d.ts.map +1 -1
- package/dist/plugin/react-server/plugin.js +5 -141
- package/dist/plugin/react-server/plugin.server.d.ts +3 -0
- package/dist/plugin/react-server/plugin.server.d.ts.map +1 -0
- package/dist/plugin/react-server/plugin.server.js +18 -0
- package/dist/plugin/react-server/types.d.ts +11 -0
- package/dist/plugin/react-server/types.d.ts.map +1 -0
- package/dist/plugin/react-server/types.js +1 -0
- package/dist/plugin/react-static/collectHtmlContent.d.ts +15 -0
- package/dist/plugin/react-static/collectHtmlContent.d.ts.map +1 -0
- package/dist/plugin/react-static/collectHtmlContent.js +104 -0
- package/dist/plugin/react-static/collectRscContent.d.ts +10 -15
- package/dist/plugin/react-static/collectRscContent.d.ts.map +1 -1
- package/dist/plugin/react-static/collectRscContent.js +71 -20
- package/dist/plugin/react-static/configurePreviewServer.d.ts +1 -7
- package/dist/plugin/react-static/configurePreviewServer.d.ts.map +1 -1
- package/dist/plugin/react-static/configurePreviewServer.js +15 -29
- package/dist/plugin/react-static/createBuildLoader.client.d.ts +2 -0
- package/dist/plugin/react-static/createBuildLoader.client.d.ts.map +1 -0
- package/dist/plugin/react-static/createBuildLoader.client.js +7 -0
- package/dist/plugin/react-static/createBuildLoader.d.ts +3 -19
- package/dist/plugin/react-static/createBuildLoader.d.ts.map +1 -1
- package/dist/plugin/react-static/createBuildLoader.js +4 -226
- package/dist/plugin/react-static/createBuildLoader.server.d.ts +9 -0
- package/dist/plugin/react-static/createBuildLoader.server.d.ts.map +1 -0
- package/dist/plugin/react-static/createBuildLoader.server.js +253 -0
- package/dist/plugin/react-static/fileWriter.d.ts +3 -14
- package/dist/plugin/react-static/fileWriter.d.ts.map +1 -1
- package/dist/plugin/react-static/fileWriter.js +233 -42
- package/dist/plugin/react-static/index.client.d.ts +7 -0
- package/dist/plugin/react-static/index.client.d.ts.map +1 -0
- package/dist/plugin/react-static/index.client.js +6 -0
- package/dist/plugin/react-static/index.d.ts +7 -1
- package/dist/plugin/react-static/index.d.ts.map +1 -1
- package/dist/plugin/react-static/index.js +19 -1
- package/dist/plugin/react-static/index.server.d.ts +7 -0
- package/dist/plugin/react-static/index.server.d.ts.map +1 -0
- package/dist/plugin/react-static/index.server.js +6 -0
- package/dist/plugin/react-static/plugin.client.d.ts +32 -0
- package/dist/plugin/react-static/plugin.client.d.ts.map +1 -0
- package/dist/plugin/react-static/plugin.client.js +801 -0
- package/dist/plugin/react-static/plugin.d.ts +3 -20
- package/dist/plugin/react-static/plugin.d.ts.map +1 -1
- package/dist/plugin/react-static/plugin.js +4 -365
- package/dist/plugin/react-static/plugin.server.d.ts +18 -0
- package/dist/plugin/react-static/plugin.server.d.ts.map +1 -0
- package/dist/plugin/react-static/plugin.server.js +615 -0
- package/dist/plugin/react-static/processCssFilesForPages.d.ts +16 -0
- package/dist/plugin/react-static/processCssFilesForPages.d.ts.map +1 -0
- package/dist/plugin/react-static/processCssFilesForPages.js +94 -0
- package/dist/plugin/react-static/renderPage.client.d.ts +49 -0
- package/dist/plugin/react-static/renderPage.client.d.ts.map +1 -0
- package/dist/plugin/react-static/renderPage.client.js +555 -0
- package/dist/plugin/react-static/renderPage.d.ts +3 -4
- package/dist/plugin/react-static/renderPage.d.ts.map +1 -1
- package/dist/plugin/react-static/renderPage.js +6 -131
- package/dist/plugin/react-static/renderPage.server.d.ts +24 -0
- package/dist/plugin/react-static/renderPage.server.d.ts.map +1 -0
- package/dist/plugin/react-static/renderPage.server.js +533 -0
- package/dist/plugin/react-static/renderPages.d.ts +11 -3
- package/dist/plugin/react-static/renderPages.d.ts.map +1 -1
- package/dist/plugin/react-static/renderPages.js +533 -92
- package/dist/plugin/react-static/renderPagesBatched.d.ts +6 -0
- package/dist/plugin/react-static/renderPagesBatched.d.ts.map +1 -0
- package/dist/plugin/react-static/renderPagesBatched.js +195 -0
- package/dist/plugin/react-static/renderStreams.d.ts +2 -5
- package/dist/plugin/react-static/renderStreams.d.ts.map +1 -1
- package/dist/plugin/react-static/renderStreams.js +36 -24
- package/dist/plugin/react-static/rscToHtmlStream.client.d.ts +12 -0
- package/dist/plugin/react-static/rscToHtmlStream.client.d.ts.map +1 -0
- package/dist/plugin/react-static/rscToHtmlStream.client.js +32 -0
- package/dist/plugin/react-static/rscToHtmlStream.d.ts +3 -21
- package/dist/plugin/react-static/rscToHtmlStream.d.ts.map +1 -1
- package/dist/plugin/react-static/rscToHtmlStream.js +4 -53
- package/dist/plugin/react-static/rscToHtmlStream.server.d.ts +3 -0
- package/dist/plugin/react-static/rscToHtmlStream.server.d.ts.map +1 -0
- package/dist/plugin/react-static/rscToHtmlStream.server.js +39 -0
- package/dist/plugin/react-static/temporaryReferences.client.d.ts +2 -0
- package/dist/plugin/react-static/temporaryReferences.client.d.ts.map +1 -0
- package/dist/plugin/react-static/temporaryReferences.client.js +1 -0
- package/dist/plugin/react-static/temporaryReferences.d.ts +2 -1
- package/dist/plugin/react-static/temporaryReferences.d.ts.map +1 -1
- package/dist/plugin/react-static/temporaryReferences.js +6 -10
- package/dist/plugin/react-static/temporaryReferences.server.d.ts +2 -0
- package/dist/plugin/react-static/temporaryReferences.server.d.ts.map +1 -0
- package/dist/plugin/react-static/temporaryReferences.server.js +3 -0
- package/dist/plugin/react-static/types.d.ts +83 -9
- package/dist/plugin/react-static/types.d.ts.map +1 -1
- package/dist/plugin/root.d.ts.map +1 -1
- package/dist/plugin/root.js +2 -5
- package/dist/plugin/stream/MessagePortReadable.d.ts +22 -0
- package/dist/plugin/stream/MessagePortReadable.d.ts.map +1 -0
- package/dist/plugin/stream/MessagePortReadable.js +101 -0
- package/dist/plugin/stream/MessagePortWritable.d.ts +22 -0
- package/dist/plugin/stream/MessagePortWritable.d.ts.map +1 -0
- package/dist/plugin/stream/MessagePortWritable.js +85 -0
- package/dist/plugin/stream/client.js +12 -0
- package/dist/plugin/stream/createFromNodeStream.client.d.ts +9 -0
- package/dist/plugin/stream/createFromNodeStream.client.d.ts.map +1 -0
- package/dist/plugin/stream/createFromNodeStream.client.js +76 -0
- package/dist/plugin/stream/createFromNodeStream.d.ts +3 -0
- package/dist/plugin/stream/createFromNodeStream.d.ts.map +1 -0
- package/dist/plugin/stream/createFromNodeStream.js +6 -0
- package/dist/plugin/stream/createFromNodeStream.server.d.ts +9 -0
- package/dist/plugin/stream/createFromNodeStream.server.d.ts.map +1 -0
- package/dist/plugin/stream/createFromNodeStream.server.js +27 -0
- package/dist/plugin/stream/createFromNodeStream.types.d.ts +37 -0
- package/dist/plugin/stream/createFromNodeStream.types.d.ts.map +1 -0
- package/dist/plugin/stream/createFromNodeStream.types.js +1 -0
- package/dist/plugin/stream/createHtmlStream.client.d.ts +3 -0
- package/dist/plugin/stream/createHtmlStream.client.d.ts.map +1 -0
- package/dist/plugin/stream/createHtmlStream.client.js +42 -0
- package/dist/plugin/stream/createHtmlStream.d.ts +3 -0
- package/dist/plugin/stream/createHtmlStream.d.ts.map +1 -0
- package/dist/plugin/stream/createHtmlStream.js +6 -0
- package/dist/plugin/stream/createHtmlStream.server.d.ts +6 -0
- package/dist/plugin/stream/createHtmlStream.server.d.ts.map +1 -0
- package/dist/plugin/stream/createHtmlStream.server.js +224 -0
- package/dist/plugin/stream/createHtmlStream.types.d.ts +43 -0
- package/dist/plugin/stream/createHtmlStream.types.d.ts.map +1 -0
- package/dist/plugin/stream/createHtmlStream.types.js +1 -0
- package/dist/plugin/stream/createMainThreadHandlers.d.ts +11 -0
- package/dist/plugin/stream/createMainThreadHandlers.d.ts.map +1 -0
- package/dist/plugin/stream/createMainThreadHandlers.js +32 -0
- package/dist/plugin/stream/createMessageChannels.d.ts +29 -0
- package/dist/plugin/stream/createMessageChannels.d.ts.map +1 -0
- package/dist/plugin/stream/createMessageChannels.js +35 -0
- package/dist/plugin/stream/createRenderToPipeableStreamHandler.client.d.ts +10 -0
- package/dist/plugin/stream/createRenderToPipeableStreamHandler.client.d.ts.map +1 -0
- package/dist/plugin/stream/createRenderToPipeableStreamHandler.client.js +188 -0
- package/dist/plugin/stream/createRenderToPipeableStreamHandler.d.ts +3 -0
- package/dist/plugin/stream/createRenderToPipeableStreamHandler.d.ts.map +1 -0
- package/dist/plugin/stream/createRenderToPipeableStreamHandler.js +6 -0
- package/dist/plugin/stream/createRenderToPipeableStreamHandler.server.d.ts +45 -0
- package/dist/plugin/stream/createRenderToPipeableStreamHandler.server.d.ts.map +1 -0
- package/dist/plugin/stream/createRenderToPipeableStreamHandler.server.js +249 -0
- package/dist/plugin/stream/createRenderToPipeableStreamHandler.types.d.ts +17 -0
- package/dist/plugin/stream/createRenderToPipeableStreamHandler.types.d.ts.map +1 -0
- package/dist/plugin/stream/createRenderToPipeableStreamHandler.types.js +1 -0
- package/dist/plugin/stream/createRscStream.client.d.ts +18 -0
- package/dist/plugin/stream/createRscStream.client.d.ts.map +1 -0
- package/dist/plugin/stream/createRscStream.client.js +79 -0
- package/dist/plugin/stream/createRscStream.d.ts +2 -0
- package/dist/plugin/stream/createRscStream.d.ts.map +1 -0
- package/dist/plugin/stream/createRscStream.js +13 -0
- package/dist/plugin/stream/createRscStream.server.d.ts +46 -0
- package/dist/plugin/stream/createRscStream.server.d.ts.map +1 -0
- package/dist/plugin/stream/createRscStream.server.js +113 -0
- package/dist/plugin/stream/createRscStream.types.d.ts +134 -0
- package/dist/plugin/stream/createRscStream.types.d.ts.map +1 -0
- package/dist/plugin/stream/createRscStream.types.js +1 -0
- package/dist/plugin/stream/createRscStream.utils.d.ts +54 -0
- package/dist/plugin/stream/createRscStream.utils.d.ts.map +1 -0
- package/dist/plugin/stream/createRscStream.utils.js +91 -0
- package/dist/plugin/stream/createRscWorkerStream.d.ts +41 -0
- package/dist/plugin/stream/createRscWorkerStream.d.ts.map +1 -0
- package/dist/plugin/stream/createRscWorkerStream.js +120 -0
- package/dist/plugin/stream/handleRscStream.client.d.ts +17 -0
- package/dist/plugin/stream/handleRscStream.client.d.ts.map +1 -0
- package/dist/plugin/stream/handleRscStream.client.js +163 -0
- package/dist/plugin/stream/handleRscStream.d.ts +3 -0
- package/dist/plugin/stream/handleRscStream.d.ts.map +1 -0
- package/dist/plugin/stream/handleRscStream.js +13 -0
- package/dist/plugin/stream/handleRscStream.server.d.ts +6 -0
- package/dist/plugin/stream/handleRscStream.server.d.ts.map +1 -0
- package/dist/plugin/stream/handleRscStream.server.js +70 -0
- package/dist/plugin/stream/handleRscStream.types.d.ts +28 -0
- package/dist/plugin/stream/handleRscStream.types.d.ts.map +1 -0
- package/dist/plugin/stream/handleRscStream.types.js +1 -0
- package/dist/plugin/stream/index.client.d.ts +7 -0
- package/dist/plugin/stream/index.client.d.ts.map +1 -0
- package/dist/plugin/stream/index.client.js +11 -0
- package/dist/plugin/stream/index.d.ts +95 -0
- package/dist/plugin/stream/index.d.ts.map +1 -0
- package/dist/plugin/stream/index.js +21 -0
- package/dist/plugin/stream/index.server.d.ts +7 -0
- package/dist/plugin/stream/index.server.d.ts.map +1 -0
- package/dist/plugin/stream/index.server.js +11 -0
- package/dist/plugin/stream/renderRscStream.server.d.ts +21 -0
- package/dist/plugin/stream/renderRscStream.server.d.ts.map +1 -0
- package/dist/plugin/stream/renderRscStream.server.js +153 -0
- package/dist/plugin/stream/renderRscStream.types.d.ts +36 -0
- package/dist/plugin/stream/renderRscStream.types.d.ts.map +1 -0
- package/dist/plugin/stream/renderRscStream.types.js +1 -0
- package/dist/plugin/stream/renderRscStreamHelpers.server.d.ts +9 -0
- package/dist/plugin/stream/renderRscStreamHelpers.server.d.ts.map +1 -0
- package/dist/plugin/stream/renderRscStreamHelpers.server.js +63 -0
- package/dist/plugin/stream/server.js +12 -0
- package/dist/plugin/stream/setMaxListeners.d.ts +16 -0
- package/dist/plugin/stream/setMaxListeners.d.ts.map +1 -0
- package/dist/plugin/stream/setMaxListeners.js +16 -0
- package/dist/plugin/transformer/createTransformerPlugin.d.ts +18 -0
- package/dist/plugin/transformer/createTransformerPlugin.d.ts.map +1 -0
- package/dist/plugin/transformer/createTransformerPlugin.js +269 -0
- package/dist/plugin/transformer/plugin.client.d.ts +3 -0
- package/dist/plugin/transformer/plugin.client.d.ts.map +1 -0
- package/dist/plugin/transformer/plugin.client.js +5 -0
- package/dist/plugin/transformer/plugin.server.d.ts +2 -29
- package/dist/plugin/transformer/plugin.server.d.ts.map +1 -1
- package/dist/plugin/transformer/plugin.server.js +5 -104
- package/dist/plugin/transformer/transformerEnv.d.ts +15 -0
- package/dist/plugin/transformer/transformerEnv.d.ts.map +1 -0
- package/dist/plugin/transformer/transformerEnv.js +26 -0
- package/dist/plugin/types.d.ts +368 -143
- package/dist/plugin/types.d.ts.map +1 -1
- package/dist/plugin/types.js +1 -2
- package/dist/plugin/utils/callServer.d.ts +1 -1
- package/dist/plugin/utils/callServer.d.ts.map +1 -1
- package/dist/plugin/utils/createCallServer.d.ts +1 -1
- package/dist/plugin/utils/createCallServer.d.ts.map +1 -1
- package/dist/plugin/utils/createCallServer.js +4 -9
- package/dist/plugin/utils/createReactFetcher.d.ts +43 -2
- package/dist/plugin/utils/createReactFetcher.d.ts.map +1 -1
- package/dist/plugin/utils/createReactFetcher.js +14 -3
- package/dist/plugin/utils/envUrls.node.d.ts.map +1 -1
- package/dist/plugin/utils/envUrls.node.js +11 -11
- package/dist/plugin/utils/index.client.d.ts +8 -0
- package/dist/plugin/utils/index.client.d.ts.map +1 -0
- package/dist/plugin/utils/index.client.js +8 -0
- package/dist/plugin/utils/index.d.ts +1 -0
- package/dist/plugin/utils/index.d.ts.map +1 -1
- package/dist/plugin/utils/index.js +3 -2
- package/dist/plugin/utils/index.server.d.ts +6 -0
- package/dist/plugin/utils/index.server.d.ts.map +1 -0
- package/dist/plugin/utils/index.server.js +8 -0
- package/dist/plugin/utils/routeToURL.d.ts.map +1 -1
- package/dist/plugin/utils/routeToURL.js +4 -4
- package/dist/plugin/utils/urls.d.ts +1 -1
- package/dist/plugin/utils/urls.d.ts.map +1 -1
- package/dist/plugin/utils/urls.js +29 -8
- package/dist/plugin/utils/useRscHmr.d.ts +39 -0
- package/dist/plugin/utils/useRscHmr.d.ts.map +1 -0
- package/dist/plugin/utils/useRscHmr.js +27 -0
- package/dist/plugin/vendor/vendor.client.d.ts +3 -3
- package/dist/plugin/vendor/vendor.client.d.ts.map +1 -1
- package/dist/plugin/vendor/vendor.client.js +7 -6
- package/dist/plugin/vendor/vendor.d.ts +1 -1
- package/dist/plugin/vendor/vendor.d.ts.map +1 -1
- package/dist/plugin/vendor/vendor.js +4 -6
- package/dist/plugin/vendor/vendor.server.d.ts +4 -2
- package/dist/plugin/vendor/vendor.server.d.ts.map +1 -1
- package/dist/plugin/vendor/vendor.server.js +2 -3
- package/dist/plugin/vendor/vendor.static.d.ts +4 -0
- package/dist/plugin/vendor/vendor.static.d.ts.map +1 -0
- package/dist/plugin/vendor/vendor.static.js +15 -0
- package/dist/plugin/worker/createWorker.d.ts +16 -5
- package/dist/plugin/worker/createWorker.d.ts.map +1 -1
- package/dist/plugin/worker/createWorker.js +207 -30
- package/dist/plugin/worker/html/handleHtmlRender.d.ts +14 -0
- package/dist/plugin/worker/html/handleHtmlRender.d.ts.map +1 -0
- package/dist/plugin/worker/html/handleHtmlRender.js +190 -0
- package/dist/plugin/worker/html/html-worker.development.js +9 -26
- package/dist/plugin/worker/html/html-worker.js +4 -4
- package/dist/plugin/worker/html/html-worker.production.js +7 -13
- package/dist/plugin/worker/html/index.d.ts +1 -1
- package/dist/plugin/worker/html/index.js +6 -2
- package/dist/plugin/worker/html/messageHandler.d.ts +1 -1
- package/dist/plugin/worker/html/messageHandler.d.ts.map +1 -1
- package/dist/plugin/worker/html/messageHandler.js +291 -104
- package/dist/plugin/worker/html/state.d.ts +10 -0
- package/dist/plugin/worker/html/state.d.ts.map +1 -0
- package/dist/plugin/worker/html/state.js +28 -0
- package/dist/plugin/worker/html/types.d.ts +52 -23
- package/dist/plugin/worker/html/types.d.ts.map +1 -1
- package/dist/plugin/worker/index.js +1 -1
- package/dist/plugin/worker/rsc/createBundleLoader.d.ts +22 -0
- package/dist/plugin/worker/rsc/createBundleLoader.d.ts.map +1 -0
- package/dist/plugin/worker/rsc/createBundleLoader.js +55 -0
- package/dist/plugin/worker/rsc/createRscWorkerLoader.d.ts +23 -0
- package/dist/plugin/worker/rsc/createRscWorkerLoader.d.ts.map +1 -0
- package/dist/plugin/worker/rsc/createRscWorkerLoader.js +79 -0
- package/dist/plugin/worker/rsc/handleRscRender.d.ts +32 -0
- package/dist/plugin/worker/rsc/handleRscRender.d.ts.map +1 -0
- package/dist/plugin/worker/rsc/handleRscRender.js +349 -0
- package/dist/plugin/worker/rsc/handlers.d.ts +8 -2
- package/dist/plugin/worker/rsc/handlers.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/handlers.js +137 -200
- package/dist/plugin/worker/rsc/hydrateRscRenderMessage.d.ts +118 -0
- package/dist/plugin/worker/rsc/hydrateRscRenderMessage.d.ts.map +1 -0
- package/dist/plugin/worker/rsc/hydrateRscRenderMessage.js +61 -0
- package/dist/plugin/worker/rsc/messageHandler.d.ts +1 -1
- package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/messageHandler.js +927 -47
- package/dist/plugin/worker/rsc/rsc-worker.development.js +153 -148
- package/dist/plugin/worker/rsc/rsc-worker.js +2 -3
- package/dist/plugin/worker/rsc/rsc-worker.production.js +240 -15
- package/dist/plugin/worker/rsc/state.d.ts +6 -0
- package/dist/plugin/worker/rsc/state.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/state.js +37 -5
- package/dist/plugin/worker/rsc/types.d.ts +73 -12
- package/dist/plugin/worker/rsc/types.d.ts.map +1 -1
- package/dist/plugin/worker/rsc/workerUserOptions.d.ts +10 -0
- package/dist/plugin/worker/rsc/workerUserOptions.d.ts.map +1 -0
- package/dist/plugin/worker/rsc/workerUserOptions.js +39 -0
- package/dist/plugin/worker/sendMessage.d.ts +2 -3
- package/dist/plugin/worker/sendMessage.d.ts.map +1 -1
- package/dist/plugin/worker/sendMessage.js +24 -38
- package/dist/plugin/worker/types.d.ts +42 -56
- package/dist/plugin/worker/types.d.ts.map +1 -1
- package/dist/plugin/worker/worker-handlers.server.d.ts +2 -0
- package/dist/plugin/worker/worker-handlers.server.d.ts.map +1 -0
- package/dist/plugin/worker/worker-handlers.server.js +1 -0
- package/dist/server.d.ts +5 -1
- package/dist/server.d.ts.map +1 -1
- package/dist/server.js +4 -6
- package/dist/static.js +11 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +102 -27
- package/plugin/bundle/bundles.ts +22 -0
- package/plugin/bundle/deferredStaticGeneration.ts +48 -0
- package/plugin/bundle/manifests.ts +73 -0
- package/plugin/components/css.tsx +3 -7
- package/plugin/components/html.tsx +4 -3
- package/plugin/components/index.ts +1 -1
- package/plugin/components/root.tsx +3 -3
- package/plugin/config/autoDiscover/createGlobAutoDiscover.ts +10 -5
- package/plugin/config/autoDiscover/pageAndPropFiles.ts +4 -2
- package/plugin/config/autoDiscover/resolveAutoDiscover.ts +64 -79
- package/plugin/config/autoDiscover/resolveBuildPages.ts +181 -69
- package/plugin/config/createHandlerOptions.client.ts +403 -0
- package/plugin/config/createHandlerOptions.server.ts +477 -0
- package/plugin/config/createHandlerOptions.ts +46 -0
- package/plugin/config/createHandlerOptions.types.ts +119 -0
- package/plugin/config/createModuleID.ts +201 -10
- package/plugin/config/defaults.tsx +108 -55
- package/plugin/config/envPrefixFromConfig.ts +10 -0
- package/plugin/config/getCondition.ts +267 -10
- package/plugin/{getNodeEnv.ts → config/getNodeEnv.ts} +4 -2
- package/plugin/config/index.ts +60 -1
- package/plugin/config/resolveDirectiveMatcher.ts +13 -34
- package/plugin/config/resolveEnv.ts +37 -33
- package/plugin/config/resolveOptions.ts +375 -154
- package/plugin/config/resolvePages.ts +1 -1
- package/plugin/config/resolvePatternWithValues.ts +6 -26
- package/plugin/config/resolveUrlOption.ts +2 -2
- package/plugin/config/resolveUserConfig.ts +359 -124
- package/plugin/config/stashedOptionsState.ts +144 -0
- package/plugin/dev-server/cleanupServerAction.client.ts +47 -0
- package/plugin/dev-server/cleanupServerAction.server.ts +24 -0
- package/plugin/dev-server/cleanupServerAction.ts +8 -0
- package/plugin/dev-server/configureReactServer.client.ts +107 -0
- package/plugin/dev-server/configureReactServer.server.ts +558 -0
- package/plugin/dev-server/configureReactServer.ts +8 -0
- package/plugin/dev-server/configureRequestHandler.client.ts +382 -0
- package/plugin/dev-server/configureRequestHandler.server.ts +46 -0
- package/plugin/dev-server/configureRequestHandler.ts +8 -0
- package/plugin/dev-server/handleServerAction.client.ts +126 -0
- package/plugin/dev-server/handleServerAction.server.ts +10 -0
- package/plugin/dev-server/handleServerAction.ts +8 -0
- package/plugin/dev-server/index.client.ts +6 -0
- package/plugin/dev-server/index.server.ts +6 -0
- package/plugin/dev-server/index.ts +20 -0
- package/plugin/dev-server/plugin.client.ts +160 -0
- package/plugin/dev-server/plugin.server.ts +133 -0
- package/plugin/dev-server/restartWorker.client.ts +155 -0
- package/plugin/dev-server/restartWorker.server.ts +108 -0
- package/plugin/dev-server/restartWorker.ts +8 -0
- package/plugin/dev-server/types.ts +78 -0
- package/plugin/dev-server/virtualRscHmrPlugin.ts +82 -0
- package/plugin/env/createConfigEnv.ts +59 -0
- package/plugin/env/createEnvPlugin.ts +76 -0
- package/plugin/env/getArgValue.ts +56 -0
- package/plugin/env/getEnvKey.ts +80 -0
- package/plugin/env/index.ts +14 -1
- package/plugin/env/plugin.client.ts +3 -0
- package/plugin/env/plugin.server.ts +4 -0
- package/plugin/env/plugin.ts +40 -164
- package/plugin/env/userConfigEnv.ts +22 -0
- package/plugin/environments/createBuildEventPlugin.ts +117 -0
- package/plugin/environments/createEnvironmentPlugin.ts +332 -0
- package/plugin/environments/hashCoordination.ts +39 -0
- package/plugin/environments/resolveEnvironmentConfig.ts +320 -0
- package/plugin/error/assertPanic.ts +9 -0
- package/plugin/error/handleError.ts +63 -0
- package/plugin/error/index.ts +4 -1
- package/plugin/error/logError.ts +64 -40
- package/plugin/error/panicThresholdHandler.ts +52 -0
- package/plugin/error/serializeError.ts +36 -11
- package/plugin/error/serializeErrorInfo.ts +17 -0
- package/plugin/error/setupGlobalErrorHandler.ts +71 -0
- package/plugin/error/shouldPanic.ts +14 -0
- package/plugin/error/toError.ts +59 -19
- package/plugin/error/types.ts +32 -0
- package/plugin/helpers/README.md +112 -0
- package/plugin/helpers/collectManifestCss.ts +24 -5
- package/plugin/helpers/collectViteModuleGraphCss.ts +83 -9
- package/plugin/helpers/createBufferedRscStream.ts +194 -0
- package/plugin/helpers/createCssProps.tsx +22 -41
- package/plugin/helpers/createElementWithReact.tsx +121 -0
- package/plugin/helpers/createPatternMatcher.ts +100 -0
- package/plugin/helpers/createRscRenderHelpers.ts +77 -0
- package/plugin/helpers/createSafePageComponent.ts +64 -0
- package/plugin/helpers/createSerializableHandlerOptions.ts +183 -0
- package/plugin/helpers/createSharedLoader.ts +207 -0
- package/plugin/helpers/createUnifiedCssProcessor.ts +175 -0
- package/plugin/helpers/getBundleManifest.ts +2 -3
- package/plugin/helpers/getRouteFiles.ts +94 -48
- package/plugin/helpers/handleServerAction.client.ts +145 -0
- package/plugin/helpers/handleServerAction.server.ts +151 -0
- package/plugin/helpers/handleServerAction.ts +19 -78
- package/plugin/helpers/handleServerActionHelper.ts +270 -0
- package/plugin/helpers/headlessStreamReuseHandler.ts +48 -0
- package/plugin/helpers/headlessStreamState.ts +122 -0
- package/plugin/helpers/hydrateUserOptions.ts +2 -2
- package/plugin/helpers/index.ts +32 -5
- package/plugin/helpers/logRenderStart.ts +26 -0
- package/plugin/helpers/mergeMessageWithDefaults.ts +80 -0
- package/plugin/helpers/pipeToResponse.ts +77 -0
- package/plugin/helpers/requestInfo.ts +59 -39
- package/plugin/helpers/resolveComponents.client.ts +183 -0
- package/plugin/helpers/resolveModuleFromManifest.ts +99 -0
- package/plugin/helpers/resolvePageAndProps.ts +237 -50
- package/plugin/helpers/resolveRenderUrl.ts +26 -0
- package/plugin/helpers/resolveStreamElements.client.ts +50 -0
- package/plugin/helpers/resolveStreamElements.server.ts +43 -0
- package/plugin/helpers/resolveStreamElements.ts +13 -0
- package/plugin/helpers/resolveStreamElements.types.ts +29 -0
- package/plugin/helpers/resolveVirtualAndNodeModules.ts +75 -0
- package/plugin/helpers/resolveWithDefaultRootAndHtml.ts +25 -0
- package/plugin/helpers/serializeUserOptions.ts +37 -15
- package/plugin/helpers/tryManifest.ts +15 -6
- package/plugin/helpers/validateRscRenderMessage.ts +13 -0
- package/plugin/helpers/workerCleanup.ts +85 -0
- package/plugin/helpers/workerManager.ts +16 -0
- package/plugin/index.ts +6 -2
- package/plugin/loader/createDefaultLoader.ts +0 -21
- package/plugin/loader/createTransformer.ts +232 -46
- package/plugin/loader/directives/analyzeDirectives.ts +163 -73
- package/plugin/loader/directives/analyzeModule.ts +46 -19
- package/plugin/loader/env-loader.ts +56 -14
- package/plugin/loader/parse.ts +2 -2
- package/plugin/loader/react-loader.ts +133 -85
- package/plugin/loader/transformClientModule.ts +84 -26
- package/plugin/loader/transformModule.ts +103 -18
- package/plugin/loader/transformModuleIfNeeded.ts +20 -23
- package/plugin/loader/transformNonServerEnvironment.ts +103 -0
- package/plugin/loader/transformServerModule.ts +132 -37
- package/plugin/loader/types.ts +31 -23
- package/plugin/metrics/collectStreamMetrics.ts +1 -2
- package/plugin/metrics/convertStreamMetrics.ts +28 -0
- package/plugin/metrics/createModuleResolutionMetrics.ts +38 -0
- package/plugin/metrics/createRenderMetrics.ts +46 -13
- package/plugin/metrics/createStreamMetrics.ts +16 -6
- package/plugin/metrics/createWorkerStartupMetrics.ts +38 -0
- package/plugin/metrics/formatMetrics.ts +5 -33
- package/plugin/metrics/index.ts +6 -3
- package/plugin/metrics/metricWatcher.ts +216 -0
- package/plugin/metrics/types.ts +87 -8
- package/plugin/orchestrator/createPluginOrchestrator.client.ts +47 -0
- package/plugin/orchestrator/createPluginOrchestrator.server.ts +55 -0
- package/plugin/orchestrator/createPluginOrchestrator.ts +29 -0
- package/plugin/orchestrator/index.ts +1 -0
- package/plugin/orchestrator/resolveStrategy.ts +53 -0
- package/plugin/orchestrator/types.ts +24 -0
- package/plugin/plugin.client.ts +30 -32
- package/plugin/plugin.server.ts +38 -45
- package/plugin/plugin.ts +8 -2
- package/plugin/process-env.ts +30 -6
- package/plugin/react-client/createMessageHandlers.ts +9 -34
- package/plugin/react-client/index.client.ts +1 -0
- package/plugin/react-client/index.server.ts +1 -0
- package/plugin/react-client/index.ts +13 -4
- package/plugin/react-client/plugin.client.ts +124 -0
- package/plugin/react-client/plugin.server.ts +108 -0
- package/plugin/react-client/plugin.ts +13 -152
- package/plugin/react-client/types.ts +95 -0
- package/plugin/react-server/index.client.ts +1 -0
- package/plugin/react-server/index.server.ts +1 -0
- package/plugin/react-server/index.ts +13 -1
- package/plugin/react-server/plugin.client.ts +54 -0
- package/plugin/react-server/plugin.server.ts +27 -0
- package/plugin/react-server/plugin.ts +8 -183
- package/plugin/react-server/types.ts +24 -0
- package/plugin/react-static/collectHtmlContent.ts +131 -0
- package/plugin/react-static/collectRscContent.ts +92 -49
- package/plugin/react-static/configurePreviewServer.ts +20 -41
- package/plugin/react-static/createBuildLoader.client.ts +7 -0
- package/plugin/react-static/createBuildLoader.server.ts +333 -0
- package/plugin/react-static/createBuildLoader.ts +8 -300
- package/plugin/react-static/fileWriter.ts +303 -64
- package/plugin/react-static/index.client.ts +6 -0
- package/plugin/react-static/index.server.ts +6 -0
- package/plugin/react-static/index.ts +25 -1
- package/plugin/react-static/plugin.client.ts +932 -0
- package/plugin/react-static/plugin.server.ts +713 -0
- package/plugin/react-static/plugin.ts +8 -446
- package/plugin/react-static/processCssFilesForPages.ts +148 -0
- package/plugin/react-static/renderPage.client.ts +640 -0
- package/plugin/react-static/renderPage.server.ts +655 -0
- package/plugin/react-static/renderPage.ts +10 -172
- package/plugin/react-static/renderPages.ts +736 -139
- package/plugin/react-static/renderPagesBatched.ts +264 -0
- package/plugin/react-static/renderStreams.ts +12 -16
- package/plugin/react-static/rscToHtmlStream.client.ts +61 -0
- package/plugin/react-static/rscToHtmlStream.server.ts +66 -0
- package/plugin/react-static/rscToHtmlStream.ts +8 -80
- package/plugin/react-static/temporaryReferences.client.ts +1 -0
- package/plugin/react-static/temporaryReferences.server.ts +5 -0
- package/plugin/react-static/temporaryReferences.ts +11 -2
- package/plugin/react-static/types.ts +202 -8
- package/plugin/root.ts +1 -3
- package/plugin/stream/MessagePortReadable.ts +131 -0
- package/plugin/stream/MessagePortWritable.ts +104 -0
- package/plugin/stream/createFromNodeStream.client.ts +90 -0
- package/plugin/stream/createFromNodeStream.server.ts +30 -0
- package/plugin/stream/createFromNodeStream.ts +13 -0
- package/plugin/stream/createFromNodeStream.types.ts +53 -0
- package/plugin/stream/createHtmlStream.client.ts +47 -0
- package/plugin/stream/createHtmlStream.server.ts +312 -0
- package/plugin/stream/createHtmlStream.ts +13 -0
- package/plugin/stream/createHtmlStream.types.ts +63 -0
- package/plugin/stream/createMainThreadHandlers.ts +44 -0
- package/plugin/stream/createMessageChannels.ts +52 -0
- package/plugin/stream/createRenderToPipeableStreamHandler.client.ts +224 -0
- package/plugin/stream/createRenderToPipeableStreamHandler.server.ts +358 -0
- package/plugin/stream/createRenderToPipeableStreamHandler.ts +13 -0
- package/plugin/stream/createRenderToPipeableStreamHandler.types.ts +69 -0
- package/plugin/stream/createRscStream.client.ts +122 -0
- package/plugin/stream/createRscStream.server.ts +188 -0
- package/plugin/stream/createRscStream.ts +8 -0
- package/plugin/stream/createRscStream.types.ts +168 -0
- package/plugin/stream/createRscStream.utils.ts +171 -0
- package/plugin/stream/createRscWorkerStream.ts +178 -0
- package/plugin/stream/handleRscStream.client.ts +214 -0
- package/plugin/stream/handleRscStream.server.ts +82 -0
- package/plugin/stream/handleRscStream.ts +11 -0
- package/plugin/stream/handleRscStream.types.ts +70 -0
- package/plugin/stream/index.client.ts +15 -0
- package/plugin/stream/index.server.ts +15 -0
- package/plugin/stream/index.ts +137 -0
- package/plugin/stream/renderRscStream.server.ts +182 -0
- package/plugin/stream/renderRscStream.types.ts +43 -0
- package/plugin/stream/renderRscStreamHelpers.server.ts +88 -0
- package/plugin/stream/setMaxListeners.ts +30 -0
- package/plugin/transformer/README.md +2 -381
- package/plugin/transformer/createTransformerPlugin.ts +388 -0
- package/plugin/transformer/plugin.client.ts +7 -0
- package/plugin/transformer/plugin.server.ts +6 -140
- package/plugin/transformer/transformerEnv.ts +49 -0
- package/plugin/types/react-server-dom-esm.d.ts +269 -110
- package/plugin/types/virtual-rsc-hmr.d.ts +21 -0
- package/plugin/types.ts +637 -225
- package/plugin/utils/createCallServer.ts +8 -18
- package/plugin/utils/createReactFetcher.ts +87 -5
- package/plugin/utils/env.ts +1 -1
- package/plugin/utils/envUrls.node.ts +15 -10
- package/plugin/utils/index.client.ts +8 -0
- package/plugin/utils/index.server.ts +8 -0
- package/plugin/utils/index.ts +5 -1
- package/plugin/utils/routeToURL.ts +3 -4
- package/plugin/utils/urls.ts +41 -9
- package/plugin/utils/useRscHmr.ts +72 -0
- package/plugin/vendor/vendor.client.ts +9 -7
- package/plugin/vendor/vendor.server.ts +5 -4
- package/plugin/vendor/vendor.static.ts +12 -0
- package/plugin/vendor/vendor.ts +10 -5
- package/plugin/worker/createWorker.ts +283 -41
- package/plugin/worker/html/README.md +2 -65
- package/plugin/worker/html/handleHtmlRender.ts +245 -0
- package/plugin/worker/html/html-worker.development.tsx +5 -17
- package/plugin/worker/html/html-worker.production.tsx +1 -1
- package/plugin/worker/html/html-worker.ts +5 -5
- package/plugin/worker/html/index.ts +6 -6
- package/plugin/worker/html/messageHandler.tsx +317 -98
- package/plugin/worker/html/state.ts +38 -0
- package/plugin/worker/html/types.ts +108 -35
- package/plugin/worker/rsc/README.md +2 -257
- package/plugin/worker/rsc/createBundleLoader.ts +92 -0
- package/plugin/worker/rsc/createRscWorkerLoader.ts +104 -0
- package/plugin/worker/rsc/handleRscRender.ts +510 -0
- package/plugin/worker/rsc/handlers.ts +159 -238
- package/plugin/worker/rsc/hydrateRscRenderMessage.ts +118 -0
- package/plugin/worker/rsc/messageHandler.tsx +1289 -56
- package/plugin/worker/rsc/rsc-worker.development.ts +198 -185
- package/plugin/worker/rsc/rsc-worker.production.ts +306 -21
- package/plugin/worker/rsc/rsc-worker.tsx +3 -5
- package/plugin/worker/rsc/state.ts +54 -2
- package/plugin/worker/rsc/types.ts +110 -32
- package/plugin/worker/rsc/workerUserOptions.ts +63 -0
- package/plugin/worker/sendMessage.ts +33 -53
- package/plugin/worker/types.ts +94 -91
- package/scripts/generate-toc.mjs +311 -0
- package/scripts/remove-toc.mjs +51 -0
- package/scripts/test-both.sh +82 -0
- package/dist/plugin/config/resolveDevServerConfig.d.ts +0 -2
- package/dist/plugin/config/resolveDevServerConfig.d.ts.map +0 -1
- package/dist/plugin/getNodeEnv.d.ts.map +0 -1
- package/dist/plugin/getNodeEnv.js +0 -17
- package/dist/plugin/helpers/collectBundleManifestCss.d.ts +0 -2
- package/dist/plugin/helpers/collectBundleManifestCss.d.ts.map +0 -1
- package/dist/plugin/helpers/collectBundleManifestCss.js +0 -2
- package/dist/plugin/helpers/createEventHandler.d.ts +0 -22
- package/dist/plugin/helpers/createEventHandler.d.ts.map +0 -1
- package/dist/plugin/helpers/createEventHandler.js +0 -36
- package/dist/plugin/helpers/createHandler.d.ts +0 -14
- package/dist/plugin/helpers/createHandler.d.ts.map +0 -1
- package/dist/plugin/helpers/createHandler.js +0 -75
- package/dist/plugin/helpers/createRscStream.d.ts +0 -26
- package/dist/plugin/helpers/createRscStream.d.ts.map +0 -1
- package/dist/plugin/helpers/createRscStream.js +0 -174
- package/dist/plugin/helpers/defaultFileWriter.d.ts +0 -2
- package/dist/plugin/helpers/defaultFileWriter.d.ts.map +0 -1
- package/dist/plugin/helpers/resolveComponents.d.ts +0 -27
- package/dist/plugin/helpers/resolveComponents.d.ts.map +0 -1
- package/dist/plugin/helpers/resolveComponents.js +0 -137
- package/dist/plugin/helpers/resolveUserComponents.d.ts +0 -33
- package/dist/plugin/helpers/resolveUserComponents.d.ts.map +0 -1
- package/dist/plugin/helpers/resolveUserComponents.js +0 -163
- package/dist/plugin/preserver/index.d.ts +0 -2
- package/dist/plugin/preserver/index.d.ts.map +0 -1
- package/dist/plugin/preserver/index.js +0 -1
- package/dist/plugin/preserver/plugin.d.ts +0 -3
- package/dist/plugin/preserver/plugin.d.ts.map +0 -1
- package/dist/plugin/preserver/plugin.js +0 -134
- package/dist/plugin/react-client/cleanupWorkerServerAction.d.ts +0 -11
- package/dist/plugin/react-client/cleanupWorkerServerAction.d.ts.map +0 -1
- package/dist/plugin/react-client/cleanupWorkerServerAction.js +0 -18
- package/dist/plugin/react-client/configureWorkerRequestHandler.d.ts +0 -17
- package/dist/plugin/react-client/configureWorkerRequestHandler.d.ts.map +0 -1
- package/dist/plugin/react-client/configureWorkerRequestHandler.js +0 -209
- package/dist/plugin/react-client/createWorkerStream.d.ts +0 -26
- package/dist/plugin/react-client/createWorkerStream.d.ts.map +0 -1
- package/dist/plugin/react-client/createWorkerStream.js +0 -163
- package/dist/plugin/react-client/handleWorkerRscStream.d.ts +0 -24
- package/dist/plugin/react-client/handleWorkerRscStream.d.ts.map +0 -1
- package/dist/plugin/react-client/handleWorkerRscStream.js +0 -99
- package/dist/plugin/react-client/handleWorkerServerAction.d.ts +0 -13
- package/dist/plugin/react-client/handleWorkerServerAction.d.ts.map +0 -1
- package/dist/plugin/react-client/handleWorkerServerAction.js +0 -62
- package/dist/plugin/react-client/restartWorker.d.ts +0 -12
- package/dist/plugin/react-client/restartWorker.d.ts.map +0 -1
- package/dist/plugin/react-client/restartWorker.js +0 -70
- package/dist/plugin/react-server/configureReactServer.d.ts +0 -10
- package/dist/plugin/react-server/configureReactServer.d.ts.map +0 -1
- package/dist/plugin/react-server/configureReactServer.js +0 -205
- package/dist/plugin/react-server/handleServerAction.d.ts +0 -6
- package/dist/plugin/react-server/handleServerAction.d.ts.map +0 -1
- package/dist/plugin/react-server/handleServerAction.js +0 -159
- package/dist/plugin/react-static/collectHtmlWorkerContent.d.ts +0 -25
- package/dist/plugin/react-static/collectHtmlWorkerContent.d.ts.map +0 -1
- package/dist/plugin/react-static/collectHtmlWorkerContent.js +0 -94
- package/dist/plugin/react-static/streamHandler.d.ts +0 -2
- package/dist/plugin/react-static/streamHandler.d.ts.map +0 -1
- package/dist/plugin/worker/html/createHtmlWorkerRenderState.d.ts +0 -12
- package/dist/plugin/worker/html/createHtmlWorkerRenderState.d.ts.map +0 -1
- package/dist/plugin/worker/html/createHtmlWorkerRenderState.js +0 -130
- package/dist/plugin/worker/html/sendHtmlWorkerMessage.d.ts +0 -3
- package/dist/plugin/worker/html/sendHtmlWorkerMessage.d.ts.map +0 -1
- package/dist/plugin/worker/html/sendHtmlWorkerMessage.js +0 -2
- package/dist/plugin/worker/rsc/handleRender.d.ts +0 -5
- package/dist/plugin/worker/rsc/handleRender.d.ts.map +0 -1
- package/dist/plugin/worker/rsc/handleRender.js +0 -140
- package/dist/plugin/worker/rsc/sendRscWorkerMessage.d.ts +0 -3
- package/dist/plugin/worker/rsc/sendRscWorkerMessage.d.ts.map +0 -1
- package/dist/plugin/worker/rsc/sendRscWorkerMessage.js +0 -11
- package/dist/plugin/worker/rsc/userOptions.d.ts +0 -2
- package/dist/plugin/worker/rsc/userOptions.d.ts.map +0 -1
- package/dist/plugin/worker/rsc/userOptions.js +0 -16
- package/plugin/helpers/collectBundleManifestCss.ts +0 -1
- package/plugin/helpers/createEventHandler.ts +0 -44
- package/plugin/helpers/createHandler.ts +0 -97
- package/plugin/helpers/createRscStream.tsx +0 -221
- package/plugin/helpers/defaultFileWriter.ts +0 -0
- package/plugin/helpers/resolveComponents.ts +0 -185
- package/plugin/helpers/resolveUserComponents.ts +0 -190
- package/plugin/preserver/index.ts +0 -1
- package/plugin/preserver/plugin.ts +0 -178
- package/plugin/react-client/cleanupWorkerServerAction.ts +0 -33
- package/plugin/react-client/configureWorkerRequestHandler.ts +0 -255
- package/plugin/react-client/createWorkerStream.ts +0 -210
- package/plugin/react-client/handleWorkerRscStream.ts +0 -156
- package/plugin/react-client/handleWorkerServerAction.ts +0 -96
- package/plugin/react-client/restartWorker.ts +0 -91
- package/plugin/react-server/configureReactServer.ts +0 -231
- package/plugin/react-server/handleServerAction.ts +0 -192
- package/plugin/react-static/collectHtmlWorkerContent.ts +0 -147
- package/plugin/react-static/streamHandler.ts +0 -0
- package/plugin/worker/html/createHtmlWorkerRenderState.tsx +0 -142
- package/plugin/worker/html/sendHtmlWorkerMessage.ts +0 -8
- package/plugin/worker/rsc/handleRender.ts +0 -175
- package/plugin/worker/rsc/sendRscWorkerMessage.ts +0 -7
- package/plugin/worker/rsc/userOptions.ts +0 -7
- /package/dist/plugin/config/{resolveDevServerConfig.js → createHandlerOptions.types.js} +0 -0
- /package/dist/plugin/{helpers/defaultFileWriter.js → dev-server/types.js} +0 -0
- /package/dist/plugin/{react-static/streamHandler.js → error/types.js} +0 -0
- /package/plugin/{config/resolveDevServerConfig.tsx → worker/worker-handlers.server.ts} +0 -0
|
@@ -3,124 +3,565 @@
|
|
|
3
3
|
* Copyright (c) Nico Brinkkemper
|
|
4
4
|
* MIT License
|
|
5
5
|
*/
|
|
6
|
+
import { handleError } from '../error/handleError.js';
|
|
7
|
+
import { shouldCausePanic } from '../error/panicThresholdHandler.js';
|
|
8
|
+
import { fileWriter } from './fileWriter.js';
|
|
6
9
|
import { createRenderMetrics } from '../metrics/createRenderMetrics.js';
|
|
7
|
-
import {
|
|
10
|
+
import { createStreamMetrics } from '../metrics/createStreamMetrics.js';
|
|
8
11
|
|
|
9
|
-
|
|
10
|
-
const
|
|
12
|
+
function resolvePathWithManifest(path, manifest) {
|
|
13
|
+
const entry = manifest[path];
|
|
14
|
+
if (entry && entry.file) {
|
|
15
|
+
return entry.file;
|
|
16
|
+
}
|
|
17
|
+
return path;
|
|
18
|
+
}
|
|
19
|
+
const renderPages = (routes, handlerOptions, renderPage) => {
|
|
20
|
+
const {
|
|
21
|
+
autoDiscoveredFiles,
|
|
22
|
+
cssFilesByPage,
|
|
23
|
+
manifest = {},
|
|
24
|
+
...options
|
|
25
|
+
} = handlerOptions;
|
|
11
26
|
const completedRoutes = /* @__PURE__ */ new Set();
|
|
12
|
-
const failedRoutes = /* @__PURE__ */ new
|
|
13
|
-
const
|
|
27
|
+
const failedRoutes = /* @__PURE__ */ new Map();
|
|
28
|
+
const activeStreams = /* @__PURE__ */ new Map();
|
|
14
29
|
const results = /* @__PURE__ */ new Map();
|
|
15
|
-
const errors = [];
|
|
16
30
|
if (!autoDiscoveredFiles.urlMap) {
|
|
17
|
-
|
|
31
|
+
return async function* _renderPages() {
|
|
32
|
+
yield {
|
|
33
|
+
type: "error",
|
|
34
|
+
error: new Error("No urlMap provided to renderPages"),
|
|
35
|
+
route: "",
|
|
36
|
+
failedRoutes: /* @__PURE__ */ new Map(),
|
|
37
|
+
completedRoutes: /* @__PURE__ */ new Set(),
|
|
38
|
+
results: /* @__PURE__ */ new Map()
|
|
39
|
+
};
|
|
40
|
+
return {
|
|
41
|
+
type: "error",
|
|
42
|
+
error: new Error("No urlMap provided to renderPages"),
|
|
43
|
+
route: "",
|
|
44
|
+
failedRoutes: /* @__PURE__ */ new Map(),
|
|
45
|
+
completedRoutes: /* @__PURE__ */ new Set(),
|
|
46
|
+
results: /* @__PURE__ */ new Map()
|
|
47
|
+
};
|
|
48
|
+
}();
|
|
18
49
|
}
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
50
|
+
return async function* _renderPages() {
|
|
51
|
+
for (const route of routes) {
|
|
52
|
+
if (options.signal?.aborted) {
|
|
53
|
+
yield {
|
|
54
|
+
type: "error",
|
|
55
|
+
error: options.signal.reason || new Error("Build aborted"),
|
|
56
|
+
route,
|
|
57
|
+
failedRoutes,
|
|
58
|
+
completedRoutes,
|
|
59
|
+
results
|
|
60
|
+
};
|
|
61
|
+
return {
|
|
62
|
+
type: "error",
|
|
63
|
+
error: options.signal.reason || new Error("Build aborted"),
|
|
64
|
+
route,
|
|
65
|
+
failedRoutes,
|
|
66
|
+
completedRoutes,
|
|
67
|
+
results
|
|
68
|
+
};
|
|
69
|
+
}
|
|
70
|
+
const { page, props, root, html } = autoDiscoveredFiles.urlMap.get(route) || {};
|
|
71
|
+
if (!page) continue;
|
|
72
|
+
try {
|
|
73
|
+
const resolvedPagePath = page ? resolvePathWithManifest(page, manifest) : void 0;
|
|
74
|
+
const resolvedPropsPath = props ? resolvePathWithManifest(props, manifest) : void 0;
|
|
75
|
+
const resolvedRootPath = root ? resolvePathWithManifest(root, manifest) : void 0;
|
|
76
|
+
const resolvedHtmlPath = html ? resolvePathWithManifest(html, manifest) : void 0;
|
|
77
|
+
if (options.verbose) {
|
|
78
|
+
options.logger?.info(
|
|
79
|
+
`[renderPages] Resolved paths for route ${route}:`
|
|
80
|
+
);
|
|
81
|
+
options.logger?.info(` page: ${page} -> ${resolvedPagePath}`);
|
|
82
|
+
options.logger?.info(` props: ${props} -> ${resolvedPropsPath}`);
|
|
83
|
+
options.logger?.info(` root: ${root} -> ${resolvedRootPath}`);
|
|
84
|
+
options.logger?.info(` html: ${html} -> ${resolvedHtmlPath}`);
|
|
85
|
+
}
|
|
86
|
+
if (options.verbose) {
|
|
87
|
+
options.logger?.info(
|
|
88
|
+
`[renderPages] Global CSS: ${options.globalCss?.size} files`
|
|
89
|
+
);
|
|
90
|
+
for (const [key, value] of options.globalCss?.entries() ?? []) {
|
|
91
|
+
options.logger?.info(
|
|
92
|
+
`[renderPages] Global CSS: ${key} -> ${value.as} (${value.children ? "inline" : "link"})`
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
options.logger?.info(
|
|
96
|
+
`[renderPages] CSS files: ${cssFilesByPage.get(route)?.size} files`
|
|
97
|
+
);
|
|
98
|
+
for (const [key, value] of cssFilesByPage.get(route)?.entries() ?? []) {
|
|
99
|
+
options.logger?.info(
|
|
100
|
+
`[renderPages] CSS file: ${key} -> ${value.as} (${value.children ? "inline" : "link"})`
|
|
101
|
+
);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
const renderPageWrapperOnEvent = (event) => {
|
|
105
|
+
if (options.onEvent) {
|
|
106
|
+
options.onEvent(event);
|
|
107
|
+
}
|
|
108
|
+
if (event.type === "route.error") {
|
|
109
|
+
const detectedPanicError = handleError({
|
|
110
|
+
error: event.data.error,
|
|
111
|
+
logger: options.logger,
|
|
112
|
+
panicThreshold: event.data.panicThreshold,
|
|
113
|
+
context: `route.error (${event.data.route})`
|
|
114
|
+
});
|
|
115
|
+
if (detectedPanicError != null) {
|
|
116
|
+
options.logger?.error(
|
|
117
|
+
`[renderPages] Panic error for route ${event.data.route}: ${event.data.error.message}`
|
|
118
|
+
);
|
|
119
|
+
failedRoutes.set(event.data.route, event.data.error);
|
|
120
|
+
} else {
|
|
121
|
+
options.logger?.warn(
|
|
122
|
+
`[renderPages] Non-panic error for route ${event.data.route}: ${event.data.error.message}`
|
|
123
|
+
);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
};
|
|
127
|
+
const routeHandlerOptions = {
|
|
128
|
+
...options,
|
|
129
|
+
manifest,
|
|
130
|
+
route,
|
|
131
|
+
pagePath: resolvedPagePath,
|
|
132
|
+
propsPath: resolvedPropsPath,
|
|
133
|
+
rootPath: resolvedRootPath,
|
|
134
|
+
htmlPath: resolvedHtmlPath,
|
|
135
|
+
cssFiles: cssFilesByPage.get(route) ?? /* @__PURE__ */ new Map(),
|
|
136
|
+
// Ensure global CSS is available to Html component
|
|
137
|
+
globalCss: options.globalCss ?? /* @__PURE__ */ new Map(),
|
|
138
|
+
// Generate unique ID for this route
|
|
139
|
+
id: `${route}-${Date.now()}-${Math.random().toString(36).substring(2, 11)}`,
|
|
140
|
+
// Override onEvent to use our wrapper
|
|
141
|
+
onEvent: renderPageWrapperOnEvent
|
|
142
|
+
};
|
|
143
|
+
const pageRenderer = renderPage(routeHandlerOptions);
|
|
144
|
+
if (options.verbose) {
|
|
145
|
+
options.logger?.info(
|
|
146
|
+
`[renderPages] Starting to process route: ${route}`
|
|
147
|
+
);
|
|
148
|
+
}
|
|
149
|
+
for await (const result of pageRenderer) {
|
|
150
|
+
if (options.verbose) {
|
|
151
|
+
options.logger?.info(
|
|
152
|
+
`[renderPages] Received result for route ${route}: ${result.type}`
|
|
153
|
+
);
|
|
154
|
+
}
|
|
155
|
+
if (result.type === "skip") {
|
|
156
|
+
if (options.verbose) {
|
|
157
|
+
options.logger?.info(
|
|
158
|
+
`[renderPages] Skipping RSC for route ${route} due to error: ${result.reason}`
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
failedRoutes.set(route, result.reason);
|
|
162
|
+
results.set(route, {
|
|
163
|
+
type: "success",
|
|
164
|
+
html: result.html,
|
|
165
|
+
rsc: result.rsc,
|
|
166
|
+
metrics: result.metrics
|
|
167
|
+
});
|
|
168
|
+
try {
|
|
169
|
+
const wrapperOnEvent = (event) => {
|
|
170
|
+
if (options.onEvent) {
|
|
171
|
+
options.onEvent(event);
|
|
172
|
+
}
|
|
173
|
+
if (event.type === "file.write.done" && event.data.route === route && event.data.fileType === "html") {
|
|
174
|
+
const routeResult = results.get(route);
|
|
175
|
+
if (routeResult && routeResult.type === "success") {
|
|
176
|
+
const endTime = performance.now();
|
|
177
|
+
const htmlMetrics = createRenderMetrics({
|
|
178
|
+
route,
|
|
179
|
+
type: routeResult.metrics.html.type,
|
|
180
|
+
fromMainThread: routeResult.metrics.html.fromMainThread,
|
|
181
|
+
fromRscWorker: routeResult.metrics.html.fromRscWorker,
|
|
182
|
+
fromHtmlWorker: routeResult.metrics.html.fromHtmlWorker,
|
|
183
|
+
fileSize: event.data.content.length,
|
|
184
|
+
chunks: event.data.chunks || 0,
|
|
185
|
+
processingTime: endTime - routeResult.metrics.html.streamMetrics.startTime,
|
|
186
|
+
chunkRate: (event.data.chunks || 0) / ((endTime - routeResult.metrics.html.streamMetrics.startTime) / 1e3),
|
|
187
|
+
fileName: event.data.fileName,
|
|
188
|
+
outputPath: event.data.path,
|
|
189
|
+
baseDir: event.data.baseDir,
|
|
190
|
+
routePath: event.data.routePath,
|
|
191
|
+
streamMetrics: createStreamMetrics({
|
|
192
|
+
...routeResult.metrics.html.streamMetrics,
|
|
193
|
+
chunks: event.data.chunks || 0,
|
|
194
|
+
bytes: event.data.content.length,
|
|
195
|
+
duration: endTime - routeResult.metrics.html.streamMetrics.startTime,
|
|
196
|
+
endTime
|
|
197
|
+
})
|
|
198
|
+
});
|
|
199
|
+
if (options.onMetrics) {
|
|
200
|
+
options.onMetrics(htmlMetrics);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
};
|
|
205
|
+
const rscWritePromise = fileWriter(
|
|
206
|
+
result.rsc,
|
|
207
|
+
"rsc",
|
|
208
|
+
{
|
|
209
|
+
...options,
|
|
210
|
+
route,
|
|
211
|
+
onEvent: wrapperOnEvent,
|
|
212
|
+
logger: options.logger
|
|
213
|
+
},
|
|
214
|
+
options.signal
|
|
215
|
+
);
|
|
216
|
+
const htmlWritePromise = fileWriter(
|
|
217
|
+
result.html,
|
|
218
|
+
"html",
|
|
219
|
+
{
|
|
220
|
+
...options,
|
|
221
|
+
route,
|
|
222
|
+
onEvent: wrapperOnEvent,
|
|
223
|
+
logger: options.logger
|
|
224
|
+
},
|
|
225
|
+
options.signal
|
|
226
|
+
);
|
|
227
|
+
await Promise.all([rscWritePromise, htmlWritePromise]);
|
|
228
|
+
completedRoutes.add(route);
|
|
229
|
+
if (options.verbose) {
|
|
230
|
+
options.logger?.info(
|
|
231
|
+
`[renderPages] Wrote HTML-only file for skipped route: ${route}`
|
|
232
|
+
);
|
|
233
|
+
}
|
|
234
|
+
} catch (writeError) {
|
|
235
|
+
if (options.verbose) {
|
|
236
|
+
options.logger?.error(
|
|
237
|
+
`[renderPages] Failed to write HTML for skipped route ${route}: ${writeError}`
|
|
238
|
+
);
|
|
239
|
+
}
|
|
240
|
+
completedRoutes.delete(route);
|
|
241
|
+
}
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
if (result.type === "error") {
|
|
245
|
+
if (options.verbose) {
|
|
246
|
+
options.logger?.error(
|
|
247
|
+
`[renderPages] Error for route ${route}: ${result.error}`
|
|
248
|
+
);
|
|
249
|
+
}
|
|
250
|
+
failedRoutes.set(route, result.error);
|
|
251
|
+
yield {
|
|
252
|
+
type: "error",
|
|
253
|
+
error: result.error,
|
|
254
|
+
route,
|
|
255
|
+
failedRoutes,
|
|
256
|
+
completedRoutes,
|
|
257
|
+
results
|
|
258
|
+
};
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
if (result.type === "success") {
|
|
262
|
+
if (options.verbose) {
|
|
263
|
+
options.logger?.info(
|
|
264
|
+
`[renderPages] Success for route ${route}, starting file writes`
|
|
265
|
+
);
|
|
266
|
+
}
|
|
267
|
+
completedRoutes.add(route);
|
|
268
|
+
results.set(route, {
|
|
269
|
+
type: "success",
|
|
270
|
+
html: result.html,
|
|
271
|
+
rsc: result.rsc,
|
|
272
|
+
metrics: result.metrics
|
|
273
|
+
});
|
|
274
|
+
activeStreams.set(route, {
|
|
275
|
+
html: result.html,
|
|
276
|
+
rsc: result.rsc
|
|
277
|
+
});
|
|
278
|
+
try {
|
|
279
|
+
const wrapperOnEvent = (event) => {
|
|
280
|
+
try {
|
|
281
|
+
if (options.onEvent) {
|
|
282
|
+
options.onEvent(event);
|
|
283
|
+
}
|
|
284
|
+
} catch (error) {
|
|
285
|
+
options.logger?.error(`[renderPages] onEvent handler threw error: ${error.message}`);
|
|
286
|
+
for (const [, streams] of activeStreams) {
|
|
287
|
+
try {
|
|
288
|
+
streams.html.abort("Build cancelled");
|
|
289
|
+
streams.rsc.abort("Build cancelled");
|
|
290
|
+
} catch (abortError) {
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
if (options.rscWorker) {
|
|
294
|
+
try {
|
|
295
|
+
options.rscWorker.postMessage({
|
|
296
|
+
type: "SHUTDOWN",
|
|
297
|
+
id: "*"
|
|
298
|
+
});
|
|
299
|
+
} catch (shutdownError) {
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
throw error;
|
|
303
|
+
}
|
|
304
|
+
if (event.type === "route.error") {
|
|
305
|
+
const detectedPanicError = handleError({
|
|
306
|
+
error: event.data.error,
|
|
307
|
+
logger: options.logger,
|
|
308
|
+
panicThreshold: event.data.panicThreshold,
|
|
309
|
+
context: `route.error (${event.data.route})`
|
|
310
|
+
});
|
|
311
|
+
if (detectedPanicError != null) {
|
|
312
|
+
options.logger?.error(
|
|
313
|
+
`[renderPages] Panic error for route ${event.data.route}: ${event.data.error.message}`
|
|
314
|
+
);
|
|
315
|
+
failedRoutes.set(event.data.route, event.data.error);
|
|
316
|
+
} else {
|
|
317
|
+
options.logger?.warn(
|
|
318
|
+
`[renderPages] Non-panic error for route ${event.data.route}: ${event.data.error.message}`
|
|
319
|
+
);
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
if (event.type === "file.write.done" && event.data.route === route) {
|
|
323
|
+
const routeResult = results.get(route);
|
|
324
|
+
if (routeResult && routeResult.type === "success") {
|
|
325
|
+
if (event.data.fileType === "html") {
|
|
326
|
+
const endTime = performance.now();
|
|
327
|
+
const htmlMetrics = createRenderMetrics({
|
|
328
|
+
route,
|
|
329
|
+
type: routeResult.metrics.html.type,
|
|
330
|
+
fromMainThread: routeResult.metrics.html.fromMainThread,
|
|
331
|
+
fromRscWorker: routeResult.metrics.html.fromRscWorker,
|
|
332
|
+
fromHtmlWorker: routeResult.metrics.html.fromHtmlWorker,
|
|
333
|
+
fileSize: event.data.content.length,
|
|
334
|
+
chunks: event.data.chunks || 0,
|
|
335
|
+
processingTime: endTime - routeResult.metrics.html.streamMetrics.startTime,
|
|
336
|
+
chunkRate: (event.data.chunks || 0) / ((endTime - routeResult.metrics.html.streamMetrics.startTime) / 1e3),
|
|
337
|
+
fileName: event.data.fileName,
|
|
338
|
+
outputPath: event.data.path,
|
|
339
|
+
baseDir: event.data.baseDir,
|
|
340
|
+
routePath: event.data.routePath,
|
|
341
|
+
streamMetrics: createStreamMetrics({
|
|
342
|
+
...routeResult.metrics.html.streamMetrics,
|
|
343
|
+
chunks: event.data.chunks || 0,
|
|
344
|
+
bytes: event.data.content.length,
|
|
345
|
+
duration: endTime - routeResult.metrics.html.streamMetrics.startTime,
|
|
346
|
+
endTime
|
|
347
|
+
})
|
|
348
|
+
});
|
|
349
|
+
if (options.onMetrics) {
|
|
350
|
+
options.onMetrics(htmlMetrics);
|
|
351
|
+
}
|
|
352
|
+
if (routeResult.metrics?.rscFull) {
|
|
353
|
+
const rscFullEndTime = performance.now();
|
|
354
|
+
const rscFullMetrics = createRenderMetrics({
|
|
355
|
+
route,
|
|
356
|
+
type: routeResult.metrics.rscFull.type,
|
|
357
|
+
fromMainThread: routeResult.metrics.rscFull.fromMainThread,
|
|
358
|
+
fromRscWorker: routeResult.metrics.rscFull.fromRscWorker,
|
|
359
|
+
fromHtmlWorker: routeResult.metrics.rscFull.fromHtmlWorker,
|
|
360
|
+
processingTime: rscFullEndTime - routeResult.metrics.rscFull.streamMetrics.startTime,
|
|
361
|
+
chunks: routeResult.metrics.rscFull.streamMetrics.chunks,
|
|
362
|
+
chunkRate: routeResult.metrics.rscFull.streamMetrics.chunks / ((rscFullEndTime - routeResult.metrics.rscFull.streamMetrics.startTime) / 1e3),
|
|
363
|
+
fileName: event.data.fileName,
|
|
364
|
+
outputPath: event.data.path,
|
|
365
|
+
baseDir: event.data.baseDir,
|
|
366
|
+
routePath: event.data.routePath,
|
|
367
|
+
streamMetrics: createStreamMetrics({
|
|
368
|
+
...routeResult.metrics.rscFull.streamMetrics,
|
|
369
|
+
duration: rscFullEndTime - routeResult.metrics.rscFull.streamMetrics.startTime,
|
|
370
|
+
endTime: rscFullEndTime
|
|
371
|
+
})
|
|
372
|
+
// this stream is consumed by the html stream
|
|
373
|
+
});
|
|
374
|
+
if (options.onMetrics) {
|
|
375
|
+
options.onMetrics(rscFullMetrics);
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
} else if (event.data.fileType === "rsc") {
|
|
379
|
+
const rscEndTime = performance.now();
|
|
380
|
+
const rscMetrics = createRenderMetrics({
|
|
381
|
+
route,
|
|
382
|
+
type: routeResult.metrics.rscHeadless.type,
|
|
383
|
+
fromMainThread: routeResult.metrics.rscHeadless.fromMainThread,
|
|
384
|
+
fromRscWorker: routeResult.metrics.rscHeadless.fromRscWorker,
|
|
385
|
+
fromHtmlWorker: routeResult.metrics.rscHeadless.fromHtmlWorker,
|
|
386
|
+
fileSize: event.data.content.length,
|
|
387
|
+
chunks: event.data.chunks || 0,
|
|
388
|
+
processingTime: rscEndTime - routeResult.metrics.rscHeadless.streamMetrics.startTime,
|
|
389
|
+
chunkRate: (event.data.chunks || 0) / ((rscEndTime - routeResult.metrics.rscHeadless.streamMetrics.startTime) / 1e3),
|
|
390
|
+
fileName: event.data.fileName,
|
|
391
|
+
outputPath: event.data.path,
|
|
392
|
+
baseDir: event.data.baseDir,
|
|
393
|
+
routePath: event.data.routePath,
|
|
394
|
+
streamMetrics: createStreamMetrics({
|
|
395
|
+
...routeResult.metrics.rscHeadless.streamMetrics,
|
|
396
|
+
chunks: event.data.chunks || 0,
|
|
397
|
+
bytes: event.data.content.length,
|
|
398
|
+
duration: rscEndTime - routeResult.metrics.rscHeadless.streamMetrics.startTime,
|
|
399
|
+
endTime: rscEndTime
|
|
400
|
+
})
|
|
401
|
+
});
|
|
402
|
+
if (options.onMetrics) {
|
|
403
|
+
options.onMetrics(rscMetrics);
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
}
|
|
407
|
+
}
|
|
408
|
+
};
|
|
409
|
+
const renderPageOnEvent = (event) => {
|
|
410
|
+
wrapperOnEvent(event);
|
|
411
|
+
};
|
|
412
|
+
const rscWritePromise = fileWriter(
|
|
413
|
+
result.rsc,
|
|
414
|
+
"rsc",
|
|
415
|
+
{
|
|
416
|
+
...options,
|
|
417
|
+
route,
|
|
418
|
+
onEvent: renderPageOnEvent,
|
|
419
|
+
logger: options.logger
|
|
420
|
+
},
|
|
421
|
+
options.signal
|
|
422
|
+
);
|
|
423
|
+
const htmlWritePromise = fileWriter(
|
|
424
|
+
result.html,
|
|
425
|
+
"html",
|
|
426
|
+
{
|
|
427
|
+
...options,
|
|
428
|
+
route,
|
|
429
|
+
onEvent: renderPageOnEvent,
|
|
430
|
+
logger: options.logger
|
|
431
|
+
},
|
|
432
|
+
options.signal
|
|
433
|
+
);
|
|
434
|
+
await Promise.all([rscWritePromise, htmlWritePromise]);
|
|
435
|
+
activeStreams.delete(route);
|
|
436
|
+
if (options.verbose) {
|
|
437
|
+
options.logger?.info(
|
|
438
|
+
`[renderPages] Successfully wrote files for route: ${route}`
|
|
439
|
+
);
|
|
440
|
+
}
|
|
441
|
+
} catch (error) {
|
|
442
|
+
if (options.verbose) {
|
|
443
|
+
options.logger?.error(
|
|
444
|
+
`[renderPages] Failed to write files for route: ${route}: ${error}`
|
|
445
|
+
);
|
|
446
|
+
}
|
|
447
|
+
failedRoutes.set(route, error);
|
|
448
|
+
completedRoutes.delete(route);
|
|
449
|
+
results.delete(route);
|
|
450
|
+
}
|
|
451
|
+
yield {
|
|
452
|
+
type: "success",
|
|
453
|
+
route,
|
|
454
|
+
completedRoutes,
|
|
455
|
+
failedRoutes,
|
|
456
|
+
results
|
|
457
|
+
};
|
|
458
|
+
}
|
|
459
|
+
}
|
|
460
|
+
} catch (err) {
|
|
461
|
+
const panicError = handleError({
|
|
462
|
+
error: err,
|
|
463
|
+
logger: options.logger,
|
|
464
|
+
panicThreshold: options.panicThreshold});
|
|
465
|
+
if (panicError != null) {
|
|
37
466
|
yield {
|
|
38
467
|
type: "error",
|
|
39
|
-
error:
|
|
468
|
+
error: panicError,
|
|
469
|
+
route,
|
|
40
470
|
failedRoutes,
|
|
41
471
|
completedRoutes,
|
|
42
|
-
htmlSizes: baseMetrics.htmlSizes,
|
|
43
|
-
rscSizes: baseMetrics.rscSizes,
|
|
44
|
-
streamMetrics: baseMetrics.streamMetrics,
|
|
45
472
|
results
|
|
46
473
|
};
|
|
47
|
-
|
|
474
|
+
break;
|
|
48
475
|
}
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
baseMetrics.rscSizes.set(route, result.metrics.rscHeadless.bytes);
|
|
58
|
-
baseMetrics.streamMetrics = {
|
|
59
|
-
...baseMetrics.streamMetrics,
|
|
60
|
-
chunks: Math.max(
|
|
61
|
-
baseMetrics.streamMetrics.chunks,
|
|
62
|
-
result.metrics.rscFull.chunks
|
|
63
|
-
),
|
|
64
|
-
bytes: Math.max(
|
|
65
|
-
baseMetrics.streamMetrics.bytes,
|
|
66
|
-
result.metrics.rscFull.bytes
|
|
67
|
-
),
|
|
68
|
-
duration: Math.max(
|
|
69
|
-
baseMetrics.streamMetrics.duration,
|
|
70
|
-
result.metrics.rscFull.duration
|
|
71
|
-
),
|
|
72
|
-
startTime: Math.min(
|
|
73
|
-
baseMetrics.streamMetrics.startTime,
|
|
74
|
-
result.metrics.rscFull.startTime
|
|
75
|
-
)
|
|
76
|
-
};
|
|
77
|
-
yield {
|
|
78
|
-
type: "success",
|
|
79
|
-
completedRoutes,
|
|
80
|
-
htmlSizes: baseMetrics.htmlSizes,
|
|
81
|
-
rscSizes: baseMetrics.rscSizes,
|
|
82
|
-
streamMetrics: baseMetrics.streamMetrics,
|
|
83
|
-
results
|
|
84
|
-
};
|
|
476
|
+
try {
|
|
477
|
+
results.delete(route);
|
|
478
|
+
completedRoutes.delete(route);
|
|
479
|
+
failedRoutes.set(route, err);
|
|
480
|
+
} catch (cleanupError) {
|
|
481
|
+
options.logger?.warn(
|
|
482
|
+
`Failed to cleanup resources for route ${route}: ${cleanupError}`
|
|
483
|
+
);
|
|
85
484
|
}
|
|
485
|
+
yield {
|
|
486
|
+
type: "success",
|
|
487
|
+
// Change from error to success for non-panic route errors
|
|
488
|
+
route,
|
|
489
|
+
failedRoutes,
|
|
490
|
+
completedRoutes,
|
|
491
|
+
results
|
|
492
|
+
};
|
|
493
|
+
if (options.panicThreshold === "none") {
|
|
494
|
+
if (options.verbose) {
|
|
495
|
+
options.logger.info(
|
|
496
|
+
`[renderPages] Stopping render loop due to error with panicThreshold: "none"`
|
|
497
|
+
);
|
|
498
|
+
}
|
|
499
|
+
break;
|
|
500
|
+
}
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
if (options.verbose) {
|
|
504
|
+
options.logger.info(
|
|
505
|
+
`[renderPages] Final state - completedRoutes: ${completedRoutes.size}, failedRoutes: ${failedRoutes.size}`
|
|
506
|
+
);
|
|
507
|
+
}
|
|
508
|
+
yield {
|
|
509
|
+
type: "success",
|
|
510
|
+
route: "",
|
|
511
|
+
// No specific route for final result
|
|
512
|
+
completedRoutes,
|
|
513
|
+
failedRoutes,
|
|
514
|
+
results
|
|
515
|
+
};
|
|
516
|
+
if (options.verbose) {
|
|
517
|
+
options.logger.info(`[renderPages] Returning success result`);
|
|
518
|
+
}
|
|
519
|
+
if (options.verbose) {
|
|
520
|
+
options.logger.info(`[renderPages] About to return success result`);
|
|
521
|
+
}
|
|
522
|
+
const shouldPanic = failedRoutes.size > 0 && shouldCausePanic(
|
|
523
|
+
Array.from(failedRoutes.values())[0],
|
|
524
|
+
// Check first failed route
|
|
525
|
+
{ panicThreshold: options.panicThreshold }
|
|
526
|
+
);
|
|
527
|
+
if (options.verbose) {
|
|
528
|
+
options.logger?.info(
|
|
529
|
+
`[renderPages] Panic check - failedRoutes.size: ${failedRoutes.size}, panicThreshold: ${options.panicThreshold}, shouldPanic: ${shouldPanic}`
|
|
530
|
+
);
|
|
531
|
+
}
|
|
532
|
+
if (shouldPanic) {
|
|
533
|
+
const firstError = Array.from(failedRoutes.values())[0];
|
|
534
|
+
if (options.verbose) {
|
|
535
|
+
options.logger?.error(
|
|
536
|
+
`[renderPages] Yielding panic error: ${firstError instanceof Error ? firstError.message : String(firstError)}`
|
|
537
|
+
);
|
|
86
538
|
}
|
|
87
|
-
} catch (err) {
|
|
88
|
-
failedRoutes.add(route);
|
|
89
|
-
errors.push(err instanceof Error ? err : new Error(String(err)));
|
|
90
539
|
yield {
|
|
91
540
|
type: "error",
|
|
92
|
-
error:
|
|
541
|
+
error: firstError instanceof Error ? firstError : new Error(String(firstError)),
|
|
542
|
+
route: "",
|
|
543
|
+
// No specific route for global panic
|
|
544
|
+
completedRoutes,
|
|
93
545
|
failedRoutes,
|
|
546
|
+
results
|
|
547
|
+
};
|
|
548
|
+
return {
|
|
549
|
+
type: "error",
|
|
550
|
+
error: firstError instanceof Error ? firstError : new Error(String(firstError)),
|
|
551
|
+
route: "",
|
|
94
552
|
completedRoutes,
|
|
95
|
-
|
|
96
|
-
rscSizes: baseMetrics.rscSizes,
|
|
97
|
-
streamMetrics: baseMetrics.streamMetrics,
|
|
553
|
+
failedRoutes,
|
|
98
554
|
results
|
|
99
555
|
};
|
|
100
556
|
}
|
|
101
|
-
}
|
|
102
|
-
if (failedRoutes.size > 0) {
|
|
103
557
|
return {
|
|
104
|
-
type: "
|
|
105
|
-
error: errors[0],
|
|
106
|
-
failedRoutes,
|
|
558
|
+
type: "success",
|
|
107
559
|
completedRoutes,
|
|
108
|
-
|
|
109
|
-
rscSizes: baseMetrics.rscSizes,
|
|
110
|
-
streamMetrics: baseMetrics.streamMetrics,
|
|
560
|
+
failedRoutes,
|
|
111
561
|
results
|
|
112
562
|
};
|
|
113
|
-
}
|
|
114
|
-
return {
|
|
115
|
-
type: "success",
|
|
116
|
-
completedRoutes,
|
|
117
|
-
failedRoutes: void 0,
|
|
118
|
-
htmlSizes: baseMetrics.htmlSizes,
|
|
119
|
-
rscSizes: baseMetrics.rscSizes,
|
|
120
|
-
streamMetrics: baseMetrics.streamMetrics,
|
|
121
|
-
results
|
|
122
|
-
};
|
|
563
|
+
}();
|
|
123
564
|
};
|
|
124
565
|
|
|
125
566
|
export { renderPages };
|
|
126
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyUGFnZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BsdWdpbi9yZWFjdC1zdGF0aWMvcmVuZGVyUGFnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZW5kZXJQYWdlcy50c1xuICpcbiAqIFBVUlBPU0U6IFByb2Nlc3NlcyBSZWFjdCBTZXJ2ZXIgQ29tcG9uZW50cyAoUlNDKSBzdHJlYW1zIGFuZCB3cml0ZXMgb3V0cHV0IGZpbGVzXG4gKlxuICogVGhpcyBtb2R1bGU6XG4gKiAxLiBDcmVhdGVzIFJTQyBhbmQgSFRNTCBzdHJlYW1zIGZvciBlYWNoIHJvdXRlXG4gKiAyLiBQaXBlcyBSU0Mgc3RyZWFtIGRpcmVjdGx5IHRvIC5yc2MgZmlsZXNcbiAqIDMuIFRyYW5zZm9ybXMgUlNDIHRvIEhUTUwgdmlhIHdvcmtlciBhbmQgcGlwZXMgdG8gLmh0bWwgZmlsZXNcbiAqIDQuIENvbGxlY3RzIG1ldHJpY3MgYW5kIGhhbmRsZXMgZXJyb3JzXG4gKi9cbmltcG9ydCB7IGNyZWF0ZVJlbmRlck1ldHJpY3MgfSBmcm9tIFwiLi4vbWV0cmljcy9jcmVhdGVSZW5kZXJNZXRyaWNzLmpzXCI7XG5pbXBvcnQgeyByZW5kZXJQYWdlIH0gZnJvbSBcIi4vcmVuZGVyUGFnZS5qc1wiO1xuaW1wb3J0IHR5cGUgeyBQYXNzVGhyb3VnaCB9IGZyb20gXCJub2RlOnN0cmVhbVwiO1xuaW1wb3J0IHR5cGUge1xuICBTdHJlYW1NZXRyaWNzLFxuICBSZW5kZXJQYWdlc1Jlc3VsdCxcbiAgQXV0b0Rpc2NvdmVyZWRGaWxlcyxcbiAgQ3NzQ29udGVudCxcbiAgTXVsdGlQYWdlSGFuZGxlck9wdGlvbnMsXG59IGZyb20gXCIuLi90eXBlcy5qc1wiO1xuXG5leHBvcnQgdHlwZSBSZW5kZXJQYWdlc1JldHVybiA9IEFzeW5jR2VuZXJhdG9yPFJlbmRlclBhZ2VzUmVzdWx0LCBSZW5kZXJQYWdlc1Jlc3VsdCwgdW5rbm93bj47XG5cbmV4cG9ydCB0eXBlIFJlbmRlclBhZ2VzRm4gPSA8XG4gIE9wdCBleHRlbmRzIE11bHRpUGFnZUhhbmRsZXJPcHRpb25zID0gTXVsdGlQYWdlSGFuZGxlck9wdGlvbnNcbj4oXG4gIGF1dG9EaXNjb3ZlcmVkRmlsZXM6IEF1dG9EaXNjb3ZlcmVkRmlsZXMsIFxuICBoYW5kbGVyT3B0aW9uczogT3B0LFxuICBjc3NGaWxlc0J5UGFnZTogTWFwPHN0cmluZywgTWFwPHN0cmluZywgQ3NzQ29udGVudDxib29sZWFuPj4+XG4pID0+IFJlbmRlclBhZ2VzUmV0dXJuO1xuXG5leHBvcnQgY29uc3QgcmVuZGVyUGFnZXM6IFJlbmRlclBhZ2VzRm4gPSBhc3luYyBmdW5jdGlvbiogX3JlbmRlclBhZ2VzKFxuICBhdXRvRGlzY292ZXJlZEZpbGVzLFxuICBoYW5kbGVyT3B0aW9ucyxcbiAgY3NzRmlsZXNCeVBhZ2Vcbikge1xuICBjb25zdCByb3V0ZXMgPSBBcnJheS5mcm9tKGF1dG9EaXNjb3ZlcmVkRmlsZXMudXJsTWFwLmtleXMoKSk7XG4gIGNvbnN0IGNvbXBsZXRlZFJvdXRlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBmYWlsZWRSb3V0ZXMgPSBuZXcgU2V0PHN0cmluZz4oKTtcbiAgY29uc3QgYmFzZU1ldHJpY3MgPSBjcmVhdGVSZW5kZXJNZXRyaWNzKHJvdXRlc1swXSk7XG4gIGNvbnN0IHJlc3VsdHMgPSBuZXcgTWFwPFxuICAgIHN0cmluZyxcbiAgICB7XG4gICAgICBodG1sOiBQYXNzVGhyb3VnaDtcbiAgICAgIHJzYzogUGFzc1Rocm91Z2g7XG4gICAgICBtZXRyaWNzOiB7XG4gICAgICAgIHJzY0Z1bGw6IFN0cmVhbU1ldHJpY3M7XG4gICAgICAgIHJzY0hlYWRsZXNzOiBTdHJlYW1NZXRyaWNzO1xuICAgICAgfTtcbiAgICB9XG4gID4oKTtcbiAgY29uc3QgZXJyb3JzOiBFcnJvcltdID0gW107XG5cbiAgaWYgKCFhdXRvRGlzY292ZXJlZEZpbGVzLnVybE1hcCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIk5vIHVybE1hcCBwcm92aWRlZCB0byByZW5kZXJQYWdlc1wiKTtcbiAgfVxuXG4gIGZvciAoY29uc3Qgcm91dGUgb2Ygcm91dGVzKSB7XG4gICAgY29uc3QgeyBwYWdlLCBwcm9wcywgcm9vdCwgaHRtbCB9ID0gYXV0b0Rpc2NvdmVyZWRGaWxlcy51cmxNYXAuZ2V0KHJvdXRlKSB8fCB7fTtcbiAgICBpZiAoIXBhZ2UpIGNvbnRpbnVlO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHBhZ2VSZW5kZXJlciA9IHJlbmRlclBhZ2Uoe1xuICAgICAgICAuLi5oYW5kbGVyT3B0aW9ucyxcbiAgICAgICAgcm91dGUsXG4gICAgICAgIHBhZ2VQYXRoOiBwYWdlIGFzIHN0cmluZyxcbiAgICAgICAgcHJvcHNQYXRoOiBwcm9wcyBhcyBzdHJpbmcsXG4gICAgICAgIHJvb3RQYXRoOiByb290IGFzIHN0cmluZyxcbiAgICAgICAgaHRtbFBhdGg6IGh0bWwgYXMgc3RyaW5nLFxuICAgICAgICBjc3NGaWxlczogY3NzRmlsZXNCeVBhZ2UuZ2V0KHJvdXRlKSA/PyBuZXcgTWFwKCksXG4gICAgICB9KTtcblxuICAgICAgZm9yIGF3YWl0IChjb25zdCByZXN1bHQgb2YgcGFnZVJlbmRlcmVyKSB7XG4gICAgICAgIGlmIChyZXN1bHQudHlwZSA9PT0gXCJza2lwXCIpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmIChyZXN1bHQudHlwZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgZmFpbGVkUm91dGVzLmFkZChyb3V0ZSk7XG4gICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0LmVycm9yKTtcbiAgICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yLFxuICAgICAgICAgICAgZmFpbGVkUm91dGVzLFxuICAgICAgICAgICAgY29tcGxldGVkUm91dGVzLFxuICAgICAgICAgICAgaHRtbFNpemVzOiBiYXNlTWV0cmljcy5odG1sU2l6ZXMsXG4gICAgICAgICAgICByc2NTaXplczogYmFzZU1ldHJpY3MucnNjU2l6ZXMsXG4gICAgICAgICAgICBzdHJlYW1NZXRyaWNzOiBiYXNlTWV0cmljcy5zdHJlYW1NZXRyaWNzLFxuICAgICAgICAgICAgcmVzdWx0cyxcbiAgICAgICAgICB9IGFzIGNvbnN0O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdC50eXBlID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgIGNvbXBsZXRlZFJvdXRlcy5hZGQocm91dGUpO1xuICAgICAgICAgIHJlc3VsdHMuc2V0KHJvdXRlLCB7XG4gICAgICAgICAgICBodG1sOiByZXN1bHQuaHRtbCxcbiAgICAgICAgICAgIHJzYzogcmVzdWx0LnJzYyxcbiAgICAgICAgICAgIG1ldHJpY3M6IHJlc3VsdC5tZXRyaWNzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gVXBkYXRlIG1ldHJpY3NcbiAgICAgICAgICBiYXNlTWV0cmljcy5odG1sU2l6ZXMuc2V0KHJvdXRlLCByZXN1bHQubWV0cmljcy5yc2NGdWxsLmJ5dGVzKTtcbiAgICAgICAgICBiYXNlTWV0cmljcy5yc2NTaXplcy5zZXQocm91dGUsIHJlc3VsdC5tZXRyaWNzLnJzY0hlYWRsZXNzLmJ5dGVzKTtcbiAgICAgICAgICBiYXNlTWV0cmljcy5zdHJlYW1NZXRyaWNzID0ge1xuICAgICAgICAgICAgLi4uYmFzZU1ldHJpY3Muc3RyZWFtTWV0cmljcyxcbiAgICAgICAgICAgIGNodW5rczogTWF0aC5tYXgoXG4gICAgICAgICAgICAgIGJhc2VNZXRyaWNzLnN0cmVhbU1ldHJpY3MuY2h1bmtzLFxuICAgICAgICAgICAgICByZXN1bHQubWV0cmljcy5yc2NGdWxsLmNodW5rc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGJ5dGVzOiBNYXRoLm1heChcbiAgICAgICAgICAgICAgYmFzZU1ldHJpY3Muc3RyZWFtTWV0cmljcy5ieXRlcyxcbiAgICAgICAgICAgICAgcmVzdWx0Lm1ldHJpY3MucnNjRnVsbC5ieXRlc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGR1cmF0aW9uOiBNYXRoLm1heChcbiAgICAgICAgICAgICAgYmFzZU1ldHJpY3Muc3RyZWFtTWV0cmljcy5kdXJhdGlvbixcbiAgICAgICAgICAgICAgcmVzdWx0Lm1ldHJpY3MucnNjRnVsbC5kdXJhdGlvblxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YXJ0VGltZTogTWF0aC5taW4oXG4gICAgICAgICAgICAgIGJhc2VNZXRyaWNzLnN0cmVhbU1ldHJpY3Muc3RhcnRUaW1lLFxuICAgICAgICAgICAgICByZXN1bHQubWV0cmljcy5yc2NGdWxsLnN0YXJ0VGltZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICBjb21wbGV0ZWRSb3V0ZXMsXG4gICAgICAgICAgICBodG1sU2l6ZXM6IGJhc2VNZXRyaWNzLmh0bWxTaXplcyxcbiAgICAgICAgICAgIHJzY1NpemVzOiBiYXNlTWV0cmljcy5yc2NTaXplcyxcbiAgICAgICAgICAgIHN0cmVhbU1ldHJpY3M6IGJhc2VNZXRyaWNzLnN0cmVhbU1ldHJpY3MsXG4gICAgICAgICAgICByZXN1bHRzLFxuICAgICAgICAgIH0gYXMgY29uc3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZhaWxlZFJvdXRlcy5hZGQocm91dGUpO1xuICAgICAgZXJyb3JzLnB1c2goZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpKTtcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpLFxuICAgICAgICBmYWlsZWRSb3V0ZXMsXG4gICAgICAgIGNvbXBsZXRlZFJvdXRlcyxcbiAgICAgICAgaHRtbFNpemVzOiBiYXNlTWV0cmljcy5odG1sU2l6ZXMsXG4gICAgICAgIHJzY1NpemVzOiBiYXNlTWV0cmljcy5yc2NTaXplcyxcbiAgICAgICAgc3RyZWFtTWV0cmljczogYmFzZU1ldHJpY3Muc3RyZWFtTWV0cmljcyxcbiAgICAgICAgcmVzdWx0cyxcbiAgICAgIH0gYXMgY29uc3Q7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZhaWxlZFJvdXRlcy5zaXplID4gMCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICBlcnJvcjogZXJyb3JzWzBdLFxuICAgICAgZmFpbGVkUm91dGVzLFxuICAgICAgY29tcGxldGVkUm91dGVzLFxuICAgICAgaHRtbFNpemVzOiBiYXNlTWV0cmljcy5odG1sU2l6ZXMsXG4gICAgICByc2NTaXplczogYmFzZU1ldHJpY3MucnNjU2l6ZXMsXG4gICAgICBzdHJlYW1NZXRyaWNzOiBiYXNlTWV0cmljcy5zdHJlYW1NZXRyaWNzLFxuICAgICAgcmVzdWx0cyxcbiAgICB9IGFzIGNvbnN0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICBjb21wbGV0ZWRSb3V0ZXMsXG4gICAgZmFpbGVkUm91dGVzOiB1bmRlZmluZWQsXG4gICAgaHRtbFNpemVzOiBiYXNlTWV0cmljcy5odG1sU2l6ZXMsXG4gICAgcnNjU2l6ZXM6IGJhc2VNZXRyaWNzLnJzY1NpemVzLFxuICAgIHN0cmVhbU1ldHJpY3M6IGJhc2VNZXRyaWNzLnN0cmVhbU1ldHJpY3MsXG4gICAgcmVzdWx0cyxcbiAgfSBhcyBjb25zdDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQWdDTyxNQUFNLFdBQTZCLEdBQUEsZ0JBQWdCLFlBQ3hELENBQUEsbUJBQUEsRUFDQSxnQkFDQSxjQUNBLEVBQUE7QUFDQSxFQUFB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
|
|
567
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyUGFnZXMuanMiLCJzb3VyY2VzIjpbIi4uLy4uLy4uL3BsdWdpbi9yZWFjdC1zdGF0aWMvcmVuZGVyUGFnZXMudHMiXSwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiByZW5kZXJQYWdlcy50c1xuICpcbiAqIFBVUlBPU0U6IFJlbmRlcnMgbXVsdGlwbGUgcGFnZXMgaW4gcGFyYWxsZWwgd2l0aCBwcm9wZXIgZXJyb3IgaGFuZGxpbmdcbiAqXG4gKiBUaGlzIG1vZHVsZTpcbiAqIDEuIFRha2VzIGEgbGlzdCBvZiByb3V0ZXMgYW5kIHJlbmRlcnMgZWFjaCBwYWdlXG4gKiAyLiBIYW5kbGVzIGVycm9ycyBncmFjZWZ1bGx5IHdpdGggY29uZmlndXJhYmxlIHBhbmljIHRocmVzaG9sZHNcbiAqIDMuIENvbGxlY3RzIG1ldHJpY3MgZm9yIGVhY2ggcmVuZGVyZWQgcGFnZVxuICogNC4gU3VwcG9ydHMgcmV0cnlpbmcgZmFpbGVkIHJvdXRlcyB3aXRoIGZhbGxiYWNrIGNvbXBvbmVudHNcbiAqIDUuIFJldHJpZXMgZmFpbGVkIHJvdXRlcyB3aXRoIG5vLW9wIFBhZ2UgY29tcG9uZW50IGZvciBtaW5pbWFsIEhUTUwgc2hlbGxzXG4gKi9cbmltcG9ydCB0eXBlIHsgUmVuZGVyUGFnZXNSZXN1bHQsIFJlbmRlclBhZ2VSZXN1bHQgfSBmcm9tIFwiLi4vdHlwZXMuanNcIjtcbmltcG9ydCB0eXBlIHsgUmVuZGVyUGFnZXNGbiB9IGZyb20gXCIuL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyBoYW5kbGVFcnJvciB9IGZyb20gXCIuLi9lcnJvci9oYW5kbGVFcnJvci5qc1wiO1xuaW1wb3J0IHsgc2hvdWxkQ2F1c2VQYW5pYyB9IGZyb20gXCIuLi9lcnJvci9wYW5pY1RocmVzaG9sZEhhbmRsZXIuanNcIjtcbmltcG9ydCB7IGZpbGVXcml0ZXIgfSBmcm9tIFwiLi9maWxlV3JpdGVyLmpzXCI7XG5cbmltcG9ydCB0eXBlIHsgTWFuaWZlc3QgfSBmcm9tIFwidml0ZVwiO1xuaW1wb3J0IHsgY3JlYXRlUmVuZGVyTWV0cmljcyB9IGZyb20gXCIuLi9tZXRyaWNzL2NyZWF0ZVJlbmRlck1ldHJpY3MuanNcIjtcbmltcG9ydCB7IGNyZWF0ZVN0cmVhbU1ldHJpY3MgfSBmcm9tIFwiLi4vbWV0cmljcy9jcmVhdGVTdHJlYW1NZXRyaWNzLmpzXCI7XG5cbmZ1bmN0aW9uIHJlc29sdmVQYXRoV2l0aE1hbmlmZXN0KHBhdGg6IHN0cmluZywgbWFuaWZlc3Q6IE1hbmlmZXN0KTogc3RyaW5nIHtcbiAgY29uc3QgZW50cnkgPSBtYW5pZmVzdFtwYXRoXTtcbiAgaWYgKGVudHJ5ICYmIGVudHJ5LmZpbGUpIHtcbiAgICByZXR1cm4gZW50cnkuZmlsZTtcbiAgfVxuICByZXR1cm4gcGF0aDtcbn1cblxuLyoqXG4gKiBSZW5kZXJzIGFsbCBwYWdlcyBmb3Igc3RhdGljIGdlbmVyYXRpb25cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uOlxuICogMS4gSXRlcmF0ZXMgdGhyb3VnaCBhbGwgcm91dGVzIGluIHRoZSB1cmxNYXBcbiAqIDIuIFJlbmRlcnMgZWFjaCBwYWdlIHVzaW5nIHRoZSBwcm92aWRlZCByZW5kZXJQYWdlIGZ1bmN0aW9uXG4gKiAzLiBXcml0ZXMgYm90aCBSU0MgYW5kIEhUTUwgZmlsZXMgZm9yIGVhY2ggcm91dGVcbiAqIDQuIEhhbmRsZXMgZXJyb3JzIGFjY29yZGluZyB0byBwYW5pYyB0aHJlc2hvbGRcbiAqIDUuIFJldHJpZXMgZmFpbGVkIHJvdXRlcyB3aXRoIG5vLW9wIFBhZ2UgY29tcG9uZW50IGZvciBtaW5pbWFsIEhUTUwgc2hlbGxzXG4gKi9cbmV4cG9ydCBjb25zdCByZW5kZXJQYWdlczogUmVuZGVyUGFnZXNGbiA9IChcbiAgcm91dGVzLFxuICBoYW5kbGVyT3B0aW9ucyxcbiAgcmVuZGVyUGFnZVxuKSA9PiB7XG4gIGNvbnN0IHtcbiAgICBhdXRvRGlzY292ZXJlZEZpbGVzLFxuICAgIGNzc0ZpbGVzQnlQYWdlLFxuICAgIG1hbmlmZXN0ID0ge30sXG4gICAgLi4ub3B0aW9uc1xuICB9ID0gaGFuZGxlck9wdGlvbnM7XG4gIGNvbnN0IGNvbXBsZXRlZFJvdXRlcyA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICBjb25zdCBmYWlsZWRSb3V0ZXMgPSBuZXcgTWFwPHN0cmluZywgdW5rbm93bj4oKTtcbiAgY29uc3QgYWN0aXZlU3RyZWFtcyA9IG5ldyBNYXA8c3RyaW5nLCB7IGh0bWw6IHsgYWJvcnQ6IChyZWFzb24/OiB1bmtub3duKSA9PiB2b2lkIH0sIHJzYzogeyBhYm9ydDogKHJlYXNvbj86IHVua25vd24pID0+IHZvaWQgfSB9PigpO1xuXG4gIGNvbnN0IHJlc3VsdHMgPSBuZXcgTWFwPHN0cmluZywgUmVuZGVyUGFnZVJlc3VsdD4oKTtcblxuICBpZiAoIWF1dG9EaXNjb3ZlcmVkRmlsZXMudXJsTWFwKSB7XG4gICAgLy8gUmV0dXJuIGFuIGVycm9yIHJlc3VsdCBpbnN0ZWFkIG9mIHRocm93aW5nXG4gICAgcmV0dXJuIChhc3luYyBmdW5jdGlvbiogX3JlbmRlclBhZ2VzKCk6IEFzeW5jR2VuZXJhdG9yPFJlbmRlclBhZ2VzUmVzdWx0LCBSZW5kZXJQYWdlc1Jlc3VsdCwgdW5rbm93bj4ge1xuICAgICAgeWllbGQge1xuICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgIGVycm9yOiBuZXcgRXJyb3IoXCJObyB1cmxNYXAgcHJvdmlkZWQgdG8gcmVuZGVyUGFnZXNcIiksXG4gICAgICAgIHJvdXRlOiBcIlwiLFxuICAgICAgICBmYWlsZWRSb3V0ZXM6IG5ldyBNYXAoKSxcbiAgICAgICAgY29tcGxldGVkUm91dGVzOiBuZXcgU2V0KCksXG4gICAgICAgIHJlc3VsdHM6IG5ldyBNYXAoKSxcbiAgICAgIH0gc2F0aXNmaWVzIFJlbmRlclBhZ2VzUmVzdWx0O1xuICAgICAgcmV0dXJuIHtcbiAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICBlcnJvcjogbmV3IEVycm9yKFwiTm8gdXJsTWFwIHByb3ZpZGVkIHRvIHJlbmRlclBhZ2VzXCIpLFxuICAgICAgICByb3V0ZTogXCJcIixcbiAgICAgICAgZmFpbGVkUm91dGVzOiBuZXcgTWFwKCksXG4gICAgICAgIGNvbXBsZXRlZFJvdXRlczogbmV3IFNldCgpLFxuICAgICAgICByZXN1bHRzOiBuZXcgTWFwKCksXG4gICAgICB9IHNhdGlzZmllcyBSZW5kZXJQYWdlc1Jlc3VsdDtcbiAgICB9KSgpO1xuICB9XG5cbiAgcmV0dXJuIChhc3luYyBmdW5jdGlvbiogX3JlbmRlclBhZ2VzKCk6IEFzeW5jR2VuZXJhdG9yPFJlbmRlclBhZ2VzUmVzdWx0LCBSZW5kZXJQYWdlc1Jlc3VsdCwgdW5rbm93bj4ge1xuICAgIC8vIEZpcnN0IHBhc3M6IHJlbmRlciBhbGwgcm91dGVzIG5vcm1hbGx5XG4gICAgZm9yIChjb25zdCByb3V0ZSBvZiByb3V0ZXMpIHtcbiAgICAgIC8vIENoZWNrIGZvciBhYm9ydCBzaWduYWxcbiAgICAgIGlmIChvcHRpb25zLnNpZ25hbD8uYWJvcnRlZCkge1xuICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICAgIGVycm9yOiBvcHRpb25zLnNpZ25hbC5yZWFzb24gfHwgbmV3IEVycm9yKFwiQnVpbGQgYWJvcnRlZFwiKSxcbiAgICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgICAgZmFpbGVkUm91dGVzLFxuICAgICAgICAgIGNvbXBsZXRlZFJvdXRlcyxcbiAgICAgICAgICByZXN1bHRzLFxuICAgICAgICB9IHNhdGlzZmllcyBSZW5kZXJQYWdlc1Jlc3VsdDtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgICAgZXJyb3I6IG9wdGlvbnMuc2lnbmFsLnJlYXNvbiB8fCBuZXcgRXJyb3IoXCJCdWlsZCBhYm9ydGVkXCIpLFxuICAgICAgICAgIHJvdXRlOiByb3V0ZSxcbiAgICAgICAgICBmYWlsZWRSb3V0ZXMsXG4gICAgICAgICAgY29tcGxldGVkUm91dGVzLFxuICAgICAgICAgIHJlc3VsdHMsXG4gICAgICAgIH0gc2F0aXNmaWVzIFJlbmRlclBhZ2VzUmVzdWx0O1xuICAgICAgfVxuICAgICAgY29uc3QgeyBwYWdlLCBwcm9wcywgcm9vdCwgaHRtbCB9ID1cbiAgICAgICAgYXV0b0Rpc2NvdmVyZWRGaWxlcy51cmxNYXAuZ2V0KHJvdXRlKSB8fCB7fTtcbiAgICAgIGlmICghcGFnZSkgY29udGludWU7XG5cbiAgICAgIHRyeSB7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkUGFnZVBhdGggPSBwYWdlXG4gICAgICAgICAgPyByZXNvbHZlUGF0aFdpdGhNYW5pZmVzdChwYWdlLCBtYW5pZmVzdClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgcmVzb2x2ZWRQcm9wc1BhdGggPSBwcm9wc1xuICAgICAgICAgID8gcmVzb2x2ZVBhdGhXaXRoTWFuaWZlc3QocHJvcHMsIG1hbmlmZXN0KVxuICAgICAgICAgIDogdW5kZWZpbmVkO1xuICAgICAgICBjb25zdCByZXNvbHZlZFJvb3RQYXRoID0gcm9vdFxuICAgICAgICAgID8gcmVzb2x2ZVBhdGhXaXRoTWFuaWZlc3Qocm9vdCwgbWFuaWZlc3QpXG4gICAgICAgICAgOiB1bmRlZmluZWQ7XG4gICAgICAgIGNvbnN0IHJlc29sdmVkSHRtbFBhdGggPSBodG1sXG4gICAgICAgICAgPyByZXNvbHZlUGF0aFdpdGhNYW5pZmVzdChodG1sLCBtYW5pZmVzdClcbiAgICAgICAgICA6IHVuZGVmaW5lZDtcblxuICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgb3B0aW9ucy5sb2dnZXI/LmluZm8oXG4gICAgICAgICAgICBgW3JlbmRlclBhZ2VzXSBSZXNvbHZlZCBwYXRocyBmb3Igcm91dGUgJHtyb3V0ZX06YFxuICAgICAgICAgICk7XG4gICAgICAgICAgb3B0aW9ucy5sb2dnZXI/LmluZm8oYCAgcGFnZTogJHtwYWdlfSAtPiAke3Jlc29sdmVkUGFnZVBhdGh9YCk7XG4gICAgICAgICAgb3B0aW9ucy5sb2dnZXI/LmluZm8oYCAgcHJvcHM6ICR7cHJvcHN9IC0+ICR7cmVzb2x2ZWRQcm9wc1BhdGh9YCk7XG4gICAgICAgICAgb3B0aW9ucy5sb2dnZXI/LmluZm8oYCAgcm9vdDogJHtyb290fSAtPiAke3Jlc29sdmVkUm9vdFBhdGh9YCk7XG4gICAgICAgICAgb3B0aW9ucy5sb2dnZXI/LmluZm8oYCAgaHRtbDogJHtodG1sfSAtPiAke3Jlc29sdmVkSHRtbFBhdGh9YCk7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgIG9wdGlvbnMubG9nZ2VyPy5pbmZvKFxuICAgICAgICAgICAgYFtyZW5kZXJQYWdlc10gR2xvYmFsIENTUzogJHtvcHRpb25zLmdsb2JhbENzcz8uc2l6ZX0gZmlsZXNgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBvcHRpb25zLmdsb2JhbENzcz8uZW50cmllcygpID8/IFtdKSB7XG4gICAgICAgICAgICBvcHRpb25zLmxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICAgICAgYFtyZW5kZXJQYWdlc10gR2xvYmFsIENTUzogJHtrZXl9IC0+ICR7dmFsdWUuYXN9ICgke1xuICAgICAgICAgICAgICAgIHZhbHVlLmNoaWxkcmVuID8gXCJpbmxpbmVcIiA6IFwibGlua1wiXG4gICAgICAgICAgICAgIH0pYFxuICAgICAgICAgICAgKTtcbiAgICAgICAgICB9XG4gICAgICAgICAgb3B0aW9ucy5sb2dnZXI/LmluZm8oXG4gICAgICAgICAgICBgW3JlbmRlclBhZ2VzXSBDU1MgZmlsZXM6ICR7Y3NzRmlsZXNCeVBhZ2UuZ2V0KHJvdXRlKT8uc2l6ZX0gZmlsZXNgXG4gICAgICAgICAgKTtcbiAgICAgICAgICBmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBjc3NGaWxlc0J5UGFnZS5nZXQocm91dGUpPy5lbnRyaWVzKCkgPz9cbiAgICAgICAgICAgIFtdKSB7XG4gICAgICAgICAgICBvcHRpb25zLmxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICAgICAgYFtyZW5kZXJQYWdlc10gQ1NTIGZpbGU6ICR7a2V5fSAtPiAke3ZhbHVlLmFzfSAoJHtcbiAgICAgICAgICAgICAgICB2YWx1ZS5jaGlsZHJlbiA/IFwiaW5saW5lXCIgOiBcImxpbmtcIlxuICAgICAgICAgICAgICB9KWBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gQ3JlYXRlIGEgd3JhcHBlciBvbkV2ZW50IHRoYXQgaGFuZGxlcyByb3V0ZS5lcnJvciBldmVudHMgaW4gcmVuZGVyUGFnZXNcbiAgICAgICAgY29uc3QgcmVuZGVyUGFnZVdyYXBwZXJPbkV2ZW50ID0gKGV2ZW50OiBhbnkpID0+IHtcbiAgICAgICAgICAvLyBDYWxsIHRoZSBvcmlnaW5hbCBvbkV2ZW50IGZpcnN0XG4gICAgICAgICAgaWYgKG9wdGlvbnMub25FdmVudCkge1xuICAgICAgICAgICAgb3B0aW9ucy5vbkV2ZW50KGV2ZW50KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBIYW5kbGUgcm91dGUuZXJyb3IgZXZlbnRzIGhlcmUgaW4gcmVuZGVyUGFnZXNcbiAgICAgICAgICBpZiAoZXZlbnQudHlwZSA9PT0gXCJyb3V0ZS5lcnJvclwiKSB7XG4gICAgICAgICAgICAvLyBNYWtlIHBhbmljIGRlY2lzaW9uIGluIHRoZSBtYWluIHRocmVhZCBiYXNlZCBvbiBwYW5pY1RocmVzaG9sZFxuICAgICAgICAgICAgY29uc3QgZGV0ZWN0ZWRQYW5pY0Vycm9yID0gaGFuZGxlRXJyb3Ioe1xuICAgICAgICAgICAgICBlcnJvcjogZXZlbnQuZGF0YS5lcnJvcixcbiAgICAgICAgICAgICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlcixcbiAgICAgICAgICAgICAgcGFuaWNUaHJlc2hvbGQ6IGV2ZW50LmRhdGEucGFuaWNUaHJlc2hvbGQsXG4gICAgICAgICAgICAgIGNvbnRleHQ6IGByb3V0ZS5lcnJvciAoJHtldmVudC5kYXRhLnJvdXRlfSlgLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGlmIChkZXRlY3RlZFBhbmljRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAvLyBUaGlzIGlzIGEgcGFuaWMgdGhyZXNob2xkIGVycm9yLCBhZGQgaXQgdG8gZmFpbGVkIHJvdXRlc1xuICAgICAgICAgICAgICBvcHRpb25zLmxvZ2dlcj8uZXJyb3IoXG4gICAgICAgICAgICAgICAgYFtyZW5kZXJQYWdlc10gUGFuaWMgZXJyb3IgZm9yIHJvdXRlICR7ZXZlbnQuZGF0YS5yb3V0ZX06ICR7ZXZlbnQuZGF0YS5lcnJvci5tZXNzYWdlfWBcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgZmFpbGVkUm91dGVzLnNldChldmVudC5kYXRhLnJvdXRlLCBldmVudC5kYXRhLmVycm9yKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIC8vIEZvciBub24tcGFuaWMgZXJyb3JzLCBqdXN0IGxvZyBhbmQgY29udGludWVcbiAgICAgICAgICAgICAgb3B0aW9ucy5sb2dnZXI/Lndhcm4oXG4gICAgICAgICAgICAgICAgYFtyZW5kZXJQYWdlc10gTm9uLXBhbmljIGVycm9yIGZvciByb3V0ZSAke2V2ZW50LmRhdGEucm91dGV9OiAke2V2ZW50LmRhdGEuZXJyb3IubWVzc2FnZX1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuICAgICAgICB9O1xuXG4gICAgICAgIC8vIENyZWF0ZSB1bmlxdWUgaGFuZGxlciBvcHRpb25zIGZvciB0aGlzIHJvdXRlXG4gICAgICAgIGNvbnN0IHJvdXRlSGFuZGxlck9wdGlvbnMgPSB7XG4gICAgICAgICAgLi4ub3B0aW9ucyxcbiAgICAgICAgICBtYW5pZmVzdCxcbiAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICBwYWdlUGF0aDogcmVzb2x2ZWRQYWdlUGF0aCBhcyBzdHJpbmcsXG4gICAgICAgICAgcHJvcHNQYXRoOiByZXNvbHZlZFByb3BzUGF0aCBhcyBzdHJpbmcsXG4gICAgICAgICAgcm9vdFBhdGg6IHJlc29sdmVkUm9vdFBhdGggYXMgc3RyaW5nLFxuICAgICAgICAgIGh0bWxQYXRoOiByZXNvbHZlZEh0bWxQYXRoIGFzIHN0cmluZyxcbiAgICAgICAgICBjc3NGaWxlczogY3NzRmlsZXNCeVBhZ2UuZ2V0KHJvdXRlKSA/PyBuZXcgTWFwKCksXG4gICAgICAgICAgLy8gRW5zdXJlIGdsb2JhbCBDU1MgaXMgYXZhaWxhYmxlIHRvIEh0bWwgY29tcG9uZW50XG4gICAgICAgICAgZ2xvYmFsQ3NzOiBvcHRpb25zLmdsb2JhbENzcyA/PyBuZXcgTWFwKCksXG4gICAgICAgICAgLy8gR2VuZXJhdGUgdW5pcXVlIElEIGZvciB0aGlzIHJvdXRlXG4gICAgICAgICAgaWQ6IGAke3JvdXRlfS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKVxuICAgICAgICAgICAgLnRvU3RyaW5nKDM2KVxuICAgICAgICAgICAgLnN1YnN0cmluZygyLCAxMSl9YCxcbiAgICAgICAgICAvLyBPdmVycmlkZSBvbkV2ZW50IHRvIHVzZSBvdXIgd3JhcHBlclxuICAgICAgICAgIG9uRXZlbnQ6IHJlbmRlclBhZ2VXcmFwcGVyT25FdmVudCxcbiAgICAgICAgfTtcblxuICAgICAgICBjb25zdCBwYWdlUmVuZGVyZXIgPSByZW5kZXJQYWdlKHJvdXRlSGFuZGxlck9wdGlvbnMpO1xuXG4gICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICBvcHRpb25zLmxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICAgIGBbcmVuZGVyUGFnZXNdIFN0YXJ0aW5nIHRvIHByb2Nlc3Mgcm91dGU6ICR7cm91dGV9YFxuICAgICAgICAgICk7XG4gICAgICAgIH1cblxuICAgICAgICBmb3IgYXdhaXQgKGNvbnN0IHJlc3VsdCBvZiBwYWdlUmVuZGVyZXIpIHtcbiAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICBvcHRpb25zLmxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICAgICAgYFtyZW5kZXJQYWdlc10gUmVjZWl2ZWQgcmVzdWx0IGZvciByb3V0ZSAke3JvdXRlfTogJHtyZXN1bHQudHlwZX1gXG4gICAgICAgICAgICApO1xuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChyZXN1bHQudHlwZSA9PT0gXCJza2lwXCIpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgb3B0aW9ucy5sb2dnZXI/LmluZm8oXG4gICAgICAgICAgICAgICAgYFtyZW5kZXJQYWdlc10gU2tpcHBpbmcgUlNDIGZvciByb3V0ZSAke3JvdXRlfSBkdWUgdG8gZXJyb3I6ICR7cmVzdWx0LnJlYXNvbn1gXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIC8vIEZvciBza2lwcGVkIHJvdXRlcywgd2Ugc3RpbGwgd2FudCB0byB3cml0ZSB0aGUgSFRNTCBmaWxlIChjbGllbnQtb25seSlcbiAgICAgICAgICAgIC8vIGJ1dCBza2lwIHRoZSBSU0MgZmlsZSBzaW5jZSB0aGVyZSB3YXMgYSBzZXJ2ZXIgZXJyb3JcbiAgICAgICAgICAgIGZhaWxlZFJvdXRlcy5zZXQocm91dGUsIHJlc3VsdC5yZWFzb24pO1xuXG4gICAgICAgICAgICAvLyBTdG9yZSB0aGUgcmVzdWx0IHdpdGggdGhlIHN0cmVhbXMgcHJvdmlkZWQgYnkgcmVuZGVyUGFnZVxuICAgICAgICAgICAgcmVzdWx0cy5zZXQocm91dGUsIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICAgIGh0bWw6IHJlc3VsdC5odG1sLFxuICAgICAgICAgICAgICByc2M6IHJlc3VsdC5yc2MsXG4gICAgICAgICAgICAgIG1ldHJpY3M6IHJlc3VsdC5tZXRyaWNzLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFdyaXRlIGJvdGggSFRNTCBhbmQgUlNDIGZpbGVzIGZvciBza2lwcGVkIHJvdXRlcyAoUlNDIHdpbGwgYmUgZW1wdHkpXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBjb25zdCB3cmFwcGVyT25FdmVudCA9IChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25FdmVudCkge1xuICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbkV2ZW50KGV2ZW50KTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgbWV0cmljcyBmb3IgSFRNTC1vbmx5IHdyaXRlc1xuICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgIGV2ZW50LnR5cGUgPT09IFwiZmlsZS53cml0ZS5kb25lXCIgJiZcbiAgICAgICAgICAgICAgICAgIGV2ZW50LmRhdGEucm91dGUgPT09IHJvdXRlICYmXG4gICAgICAgICAgICAgICAgICBldmVudC5kYXRhLmZpbGVUeXBlID09PSBcImh0bWxcIlxuICAgICAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgICAgY29uc3Qgcm91dGVSZXN1bHQgPSByZXN1bHRzLmdldChyb3V0ZSk7XG4gICAgICAgICAgICAgICAgICBpZiAocm91dGVSZXN1bHQgJiYgcm91dGVSZXN1bHQudHlwZSA9PT0gXCJzdWNjZXNzXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBodG1sTWV0cmljcyA9IGNyZWF0ZVJlbmRlck1ldHJpY3Moe1xuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlOiByb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICB0eXBlOiByb3V0ZVJlc3VsdC5tZXRyaWNzLmh0bWwudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICBmcm9tTWFpblRocmVhZDogcm91dGVSZXN1bHQubWV0cmljcy5odG1sLmZyb21NYWluVGhyZWFkLFxuICAgICAgICAgICAgICAgICAgICAgIGZyb21Sc2NXb3JrZXI6IHJvdXRlUmVzdWx0Lm1ldHJpY3MuaHRtbC5mcm9tUnNjV29ya2VyLFxuICAgICAgICAgICAgICAgICAgICAgIGZyb21IdG1sV29ya2VyOiByb3V0ZVJlc3VsdC5tZXRyaWNzLmh0bWwuZnJvbUh0bWxXb3JrZXIsXG4gICAgICAgICAgICAgICAgICAgICAgZmlsZVNpemU6IGV2ZW50LmRhdGEuY29udGVudC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgY2h1bmtzOiBldmVudC5kYXRhLmNodW5rcyB8fCAwLFxuICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdUaW1lOlxuICAgICAgICAgICAgICAgICAgICAgICAgZW5kVGltZSAtXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZVJlc3VsdC5tZXRyaWNzLmh0bWwuc3RyZWFtTWV0cmljcy5zdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgY2h1bmtSYXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50LmRhdGEuY2h1bmtzIHx8IDApIC9cbiAgICAgICAgICAgICAgICAgICAgICAgICgoZW5kVGltZSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlUmVzdWx0Lm1ldHJpY3MuaHRtbC5zdHJlYW1NZXRyaWNzLnN0YXJ0VGltZSkgL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwKSxcbiAgICAgICAgICAgICAgICAgICAgICBmaWxlTmFtZTogZXZlbnQuZGF0YS5maWxlTmFtZSxcbiAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRQYXRoOiBldmVudC5kYXRhLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgYmFzZURpcjogZXZlbnQuZGF0YS5iYXNlRGlyLFxuICAgICAgICAgICAgICAgICAgICAgIHJvdXRlUGF0aDogZXZlbnQuZGF0YS5yb3V0ZVBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgc3RyZWFtTWV0cmljczogY3JlYXRlU3RyZWFtTWV0cmljcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAuLi5yb3V0ZVJlc3VsdC5tZXRyaWNzLmh0bWwuc3RyZWFtTWV0cmljcyxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rczogZXZlbnQuZGF0YS5jaHVua3MgfHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzOiBldmVudC5kYXRhLmNvbnRlbnQubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgZHVyYXRpb246XG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFRpbWUgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZVJlc3VsdC5tZXRyaWNzLmh0bWwuc3RyZWFtTWV0cmljcy5zdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBlbmRUaW1lOiBlbmRUaW1lLFxuICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbk1ldHJpY3MpIHtcbiAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uTWV0cmljcyhodG1sTWV0cmljcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnNjV3JpdGVQcm9taXNlID0gZmlsZVdyaXRlcihcbiAgICAgICAgICAgICAgICByZXN1bHQucnNjIGFzIGFueSxcbiAgICAgICAgICAgICAgICBcInJzY1wiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICAgICAgICAgIG9uRXZlbnQ6IHdyYXBwZXJPbkV2ZW50LFxuICAgICAgICAgICAgICAgICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgY29uc3QgaHRtbFdyaXRlUHJvbWlzZSA9IGZpbGVXcml0ZXIoXG4gICAgICAgICAgICAgICAgcmVzdWx0Lmh0bWwgYXMgYW55LFxuICAgICAgICAgICAgICAgIFwiaHRtbFwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICAgICAgICAgIG9uRXZlbnQ6IHdyYXBwZXJPbkV2ZW50LFxuICAgICAgICAgICAgICAgICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgYm90aCBSU0MgYW5kIEhUTUwgZmlsZXMgdG8gYmUgd3JpdHRlblxuICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbcnNjV3JpdGVQcm9taXNlLCBodG1sV3JpdGVQcm9taXNlXSk7XG5cbiAgICAgICAgICAgICAgY29tcGxldGVkUm91dGVzLmFkZChyb3V0ZSk7XG5cbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMubG9nZ2VyPy5pbmZvKFxuICAgICAgICAgICAgICAgICAgYFtyZW5kZXJQYWdlc10gV3JvdGUgSFRNTC1vbmx5IGZpbGUgZm9yIHNraXBwZWQgcm91dGU6ICR7cm91dGV9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKHdyaXRlRXJyb3IpIHtcbiAgICAgICAgICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICAgICAgICAgIG9wdGlvbnMubG9nZ2VyPy5lcnJvcihcbiAgICAgICAgICAgICAgICAgIGBbcmVuZGVyUGFnZXNdIEZhaWxlZCB0byB3cml0ZSBIVE1MIGZvciBza2lwcGVkIHJvdXRlICR7cm91dGV9OiAke3dyaXRlRXJyb3J9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gUmVtb3ZlIGZyb20gY29tcGxldGVkIHJvdXRlcyBpZiBIVE1MIHdyaXRlIGZhaWxlZFxuICAgICAgICAgICAgICBjb21wbGV0ZWRSb3V0ZXMuZGVsZXRlKHJvdXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHJlc3VsdC50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgb3B0aW9ucy5sb2dnZXI/LmVycm9yKFxuICAgICAgICAgICAgICAgIGBbcmVuZGVyUGFnZXNdIEVycm9yIGZvciByb3V0ZSAke3JvdXRlfTogJHtyZXN1bHQuZXJyb3J9YFxuICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZmFpbGVkUm91dGVzLnNldChyb3V0ZSwgcmVzdWx0LmVycm9yKTtcbiAgICAgICAgICAgIHlpZWxkIHtcbiAgICAgICAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yLFxuICAgICAgICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgICAgICAgIGZhaWxlZFJvdXRlcyxcbiAgICAgICAgICAgICAgY29tcGxldGVkUm91dGVzLFxuICAgICAgICAgICAgICByZXN1bHRzLFxuICAgICAgICAgICAgfSBzYXRpc2ZpZXMgUmVuZGVyUGFnZXNSZXN1bHQ7XG4gICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAocmVzdWx0LnR5cGUgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICAgICAgICAgIG9wdGlvbnMubG9nZ2VyPy5pbmZvKFxuICAgICAgICAgICAgICAgIGBbcmVuZGVyUGFnZXNdIFN1Y2Nlc3MgZm9yIHJvdXRlICR7cm91dGV9LCBzdGFydGluZyBmaWxlIHdyaXRlc2BcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbXBsZXRlZFJvdXRlcy5hZGQocm91dGUpO1xuICAgICAgICAgICAgLy8gU3RvcmUgdGhlIHJlc3VsdCB3aXRoIHRoZSBjb3JyZWN0IHR5cGUgc3RydWN0dXJlXG4gICAgICAgICAgICByZXN1bHRzLnNldChyb3V0ZSwge1xuICAgICAgICAgICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgICAgaHRtbDogcmVzdWx0Lmh0bWwsXG4gICAgICAgICAgICAgIHJzYzogcmVzdWx0LnJzYyxcbiAgICAgICAgICAgICAgbWV0cmljczogcmVzdWx0Lm1ldHJpY3MsXG4gICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgLy8gU3RvcmUgYWN0aXZlIHN0cmVhbXMgZm9yIHBvdGVudGlhbCBhYm9ydGlvbiBkdXJpbmcgY2FuY2VsbGF0aW9uXG4gICAgICAgICAgICBhY3RpdmVTdHJlYW1zLnNldChyb3V0ZSwge1xuICAgICAgICAgICAgICBodG1sOiByZXN1bHQuaHRtbCxcbiAgICAgICAgICAgICAgcnNjOiByZXN1bHQucnNjLFxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgIC8vIFdyaXRlIGZpbGVzIGRpcmVjdGx5IGluIHJlbmRlclBhZ2VzXG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAvLyBDcmVhdGUgYSB3cmFwcGVyIG9uRXZlbnQgdGhhdCBjYWxscyBib3RoIHRoZSByZW5kZXJQYWdlJ3MgZXZlbnQgaGFuZGxlciBhbmQgdGhlIG9yaWdpbmFsIG9uRXZlbnRcbiAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlck9uRXZlbnQgPSAoZXZlbnQ6IGFueSkgPT4ge1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAvLyBDYWxsIHRoZSBvcmlnaW5hbCBvbkV2ZW50IGZpcnN0XG4gICAgICAgICAgICAgICAgICBpZiAob3B0aW9ucy5vbkV2ZW50KSB7XG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnMub25FdmVudChldmVudCk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgIC8vIElmIG9uRXZlbnQgdGhyb3dzIGFuIGVycm9yIChlLmcuLCBidWlsZCBjYW5jZWxsYXRpb24pLCB3ZSBuZWVkIHRvIHN0b3AgcHJvY2Vzc2luZ1xuICAgICAgICAgICAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgd29ya2VyIGZyb20gY29udGludWluZyB0byBwcm9jZXNzIGFmdGVyIHRoZSBidWlsZCBpcyBjYW5jZWxsZWRcbiAgICAgICAgICAgICAgICAgIG9wdGlvbnMubG9nZ2VyPy5lcnJvcihgW3JlbmRlclBhZ2VzXSBvbkV2ZW50IGhhbmRsZXIgdGhyZXcgZXJyb3I6ICR7KGVycm9yIGFzIEVycm9yKS5tZXNzYWdlfWApO1xuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICAvLyBGaXJzdCwgYWJvcnQgYWxsIGFjdGl2ZSBzdHJlYW1zIHRvIHN0b3AgZGF0YSBmbG93XG4gICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIGNyaXRpY2FsIHRvIHByZXZlbnQgdW5oYW5kbGVkIGVycm9ycyBhbmQgbWVtb3J5IGxlYWtzXG4gICAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IFssIHN0cmVhbXNdIG9mIGFjdGl2ZVN0cmVhbXMpIHtcbiAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zLmh0bWwuYWJvcnQoXCJCdWlsZCBjYW5jZWxsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgICAgc3RyZWFtcy5yc2MuYWJvcnQoXCJCdWlsZCBjYW5jZWxsZWRcIik7XG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGFib3J0RXJyb3IpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBTdHJlYW1zIG1heSBhbHJlYWR5IGJlIGNsb3NlZCwgaWdub3JlXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgICAgLy8gVGhlbiBzZW5kIHNodXRkb3duIHNpZ25hbCB0byB3b3JrZXIgdG8gcHJldmVudCBpdCBmcm9tIGNvbnRpbnVpbmcgdG8gcHJvY2Vzc1xuICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMucnNjV29ya2VyKSB7XG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5yc2NXb3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJTSFVURE9XTlwiLFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IFwiKlwiLFxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9IGNhdGNoIChzaHV0ZG93bkVycm9yKSB7XG4gICAgICAgICAgICAgICAgICAgICAgLy8gV29ya2VyIG1heSBhbHJlYWR5IGJlIHRlcm1pbmF0ZWQsIGlnbm9yZVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgIC8vIFJlLXRocm93IHRoZSBlcnJvciB0byBzdG9wIHRoZSBidWlsZCBwcm9jZXNzXG4gICAgICAgICAgICAgICAgICB0aHJvdyBlcnJvcjtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyBIYW5kbGUgcm91dGUuZXJyb3IgZXZlbnRzXG4gICAgICAgICAgICAgICAgaWYgKGV2ZW50LnR5cGUgPT09IFwicm91dGUuZXJyb3JcIikge1xuICAgICAgICAgICAgICAgICAgLy8gTWFrZSBwYW5pYyBkZWNpc2lvbiBpbiB0aGUgbWFpbiB0aHJlYWQgYmFzZWQgb24gcGFuaWNUaHJlc2hvbGRcbiAgICAgICAgICAgICAgICAgIGNvbnN0IGRldGVjdGVkUGFuaWNFcnJvciA9IGhhbmRsZUVycm9yKHtcbiAgICAgICAgICAgICAgICAgICAgZXJyb3I6IGV2ZW50LmRhdGEuZXJyb3IsXG4gICAgICAgICAgICAgICAgICAgIGxvZ2dlcjogb3B0aW9ucy5sb2dnZXIsXG4gICAgICAgICAgICAgICAgICAgIHBhbmljVGhyZXNob2xkOiBldmVudC5kYXRhLnBhbmljVGhyZXNob2xkLFxuICAgICAgICAgICAgICAgICAgICBjb250ZXh0OiBgcm91dGUuZXJyb3IgKCR7ZXZlbnQuZGF0YS5yb3V0ZX0pYCxcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgICBpZiAoZGV0ZWN0ZWRQYW5pY0Vycm9yICE9IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBhIHBhbmljIHRocmVzaG9sZCBlcnJvciwgYWRkIGl0IHRvIGZhaWxlZCByb3V0ZXMgdG8gYmUgeWllbGRlZFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zLmxvZ2dlcj8uZXJyb3IoXG4gICAgICAgICAgICAgICAgICAgICAgYFtyZW5kZXJQYWdlc10gUGFuaWMgZXJyb3IgZm9yIHJvdXRlICR7ZXZlbnQuZGF0YS5yb3V0ZX06ICR7ZXZlbnQuZGF0YS5lcnJvci5tZXNzYWdlfWBcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgICAgZmFpbGVkUm91dGVzLnNldChldmVudC5kYXRhLnJvdXRlLCBldmVudC5kYXRhLmVycm9yKTtcbiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIEZvciBub24tcGFuaWMgZXJyb3JzLCBqdXN0IGxvZyBhbmQgY29udGludWVcbiAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5sb2dnZXI/Lndhcm4oXG4gICAgICAgICAgICAgICAgICAgICAgYFtyZW5kZXJQYWdlc10gTm9uLXBhbmljIGVycm9yIGZvciByb3V0ZSAke2V2ZW50LmRhdGEucm91dGV9OiAke2V2ZW50LmRhdGEuZXJyb3IubWVzc2FnZX1gXG4gICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgLy8gSGFuZGxlIG1ldHJpY3MgY29sbGVjdGlvbiBoZXJlIHNpbmNlIHRoZSByZW5kZXJQYWdlIGZ1bmN0aW9uJ3MgZXZlbnQgaGFuZGxlciBpcyBub3QgYmVpbmcgY2FsbGVkXG4gICAgICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgICAgZXZlbnQudHlwZSA9PT0gXCJmaWxlLndyaXRlLmRvbmVcIiAmJlxuICAgICAgICAgICAgICAgICAgZXZlbnQuZGF0YS5yb3V0ZSA9PT0gcm91dGVcbiAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgIGNvbnN0IHJvdXRlUmVzdWx0ID0gcmVzdWx0cy5nZXQocm91dGUpO1xuICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlUmVzdWx0ICYmIHJvdXRlUmVzdWx0LnR5cGUgPT09IFwic3VjY2Vzc1wiKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChldmVudC5kYXRhLmZpbGVUeXBlID09PSBcImh0bWxcIikge1xuICAgICAgICAgICAgICAgICAgICAgIC8vIFVwZGF0ZSBIVE1MIG1ldHJpY3Mgd2l0aCBhY3R1YWwgZmlsZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGh0bWxNZXRyaWNzID0gY3JlYXRlUmVuZGVyTWV0cmljcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiByb3V0ZVJlc3VsdC5tZXRyaWNzLmh0bWwudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21NYWluVGhyZWFkOiByb3V0ZVJlc3VsdC5tZXRyaWNzLmh0bWwuZnJvbU1haW5UaHJlYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICBmcm9tUnNjV29ya2VyOiByb3V0ZVJlc3VsdC5tZXRyaWNzLmh0bWwuZnJvbVJzY1dvcmtlcixcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21IdG1sV29ya2VyOiByb3V0ZVJlc3VsdC5tZXRyaWNzLmh0bWwuZnJvbUh0bWxXb3JrZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU2l6ZTogZXZlbnQuZGF0YS5jb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rczogZXZlbnQuZGF0YS5jaHVua3MgfHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdUaW1lOlxuICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRUaW1lIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVSZXN1bHQubWV0cmljcy5odG1sLnN0cmVhbU1ldHJpY3Muc3RhcnRUaW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtSYXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAoZXZlbnQuZGF0YS5jaHVua3MgfHwgMCkgL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAoKGVuZFRpbWUgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlUmVzdWx0Lm1ldHJpY3MuaHRtbC5zdHJlYW1NZXRyaWNzLnN0YXJ0VGltZSkgL1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwMDApLFxuICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGV2ZW50LmRhdGEuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICBvdXRwdXRQYXRoOiBldmVudC5kYXRhLnBhdGgsXG4gICAgICAgICAgICAgICAgICAgICAgICBiYXNlRGlyOiBldmVudC5kYXRhLmJhc2VEaXIsXG4gICAgICAgICAgICAgICAgICAgICAgICByb3V0ZVBhdGg6IGV2ZW50LmRhdGEucm91dGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtTWV0cmljczogY3JlYXRlU3RyZWFtTWV0cmljcyh7XG4gICAgICAgICAgICAgICAgICAgICAgICAgIC4uLnJvdXRlUmVzdWx0Lm1ldHJpY3MuaHRtbC5zdHJlYW1NZXRyaWNzLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBjaHVua3M6IGV2ZW50LmRhdGEuY2h1bmtzIHx8IDAsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGJ5dGVzOiBldmVudC5kYXRhLmNvbnRlbnQubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRUaW1lIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZVJlc3VsdC5tZXRyaWNzLmh0bWwuc3RyZWFtTWV0cmljcy5zdGFydFRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGVuZFRpbWU6IGVuZFRpbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uTWV0cmljcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucy5vbk1ldHJpY3MoaHRtbE1ldHJpY3MpO1xuICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgIC8vIEFsc28gZW1pdCBSU0MgRnVsbCBtZXRyaWNzICh0aGUgUlNDIGNodW5rcyBzZW50IHRvIEhUTUwgd29ya2VyKVxuICAgICAgICAgICAgICAgICAgICAgIC8vIE9ubHkgaWYgbWV0cmljcy5yc2NGdWxsIGV4aXN0cyAobWlnaHQgYmUgbWlzc2luZyBvbiBlcnJvcnMpXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKHJvdXRlUmVzdWx0Lm1ldHJpY3M/LnJzY0Z1bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJzY0Z1bGxFbmRUaW1lID0gcGVyZm9ybWFuY2Uubm93KCk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCByc2NGdWxsTWV0cmljcyA9IGNyZWF0ZVJlbmRlck1ldHJpY3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZTogcm91dGUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHJvdXRlUmVzdWx0Lm1ldHJpY3MucnNjRnVsbC50eXBlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tTWFpblRocmVhZDpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZVJlc3VsdC5tZXRyaWNzLnJzY0Z1bGwuZnJvbU1haW5UaHJlYWQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21Sc2NXb3JrZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVSZXN1bHQubWV0cmljcy5yc2NGdWxsLmZyb21Sc2NXb3JrZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGZyb21IdG1sV29ya2VyOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlUmVzdWx0Lm1ldHJpY3MucnNjRnVsbC5mcm9tSHRtbFdvcmtlcixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcHJvY2Vzc2luZ1RpbWU6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcnNjRnVsbEVuZFRpbWUgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlUmVzdWx0Lm1ldHJpY3MucnNjRnVsbC5zdHJlYW1NZXRyaWNzLnN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtzOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlUmVzdWx0Lm1ldHJpY3MucnNjRnVsbC5zdHJlYW1NZXRyaWNzLmNodW5rcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgY2h1bmtSYXRlOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlUmVzdWx0Lm1ldHJpY3MucnNjRnVsbC5zdHJlYW1NZXRyaWNzLmNodW5rcyAvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKChyc2NGdWxsRW5kVGltZSAtXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZVJlc3VsdC5tZXRyaWNzLnJzY0Z1bGwuc3RyZWFtTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc3RhcnRUaW1lKSAvXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsZU5hbWU6IGV2ZW50LmRhdGEuZmlsZU5hbWUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dFBhdGg6IGV2ZW50LmRhdGEucGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZURpcjogZXZlbnQuZGF0YS5iYXNlRGlyLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZVBhdGg6IGV2ZW50LmRhdGEucm91dGVQYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1NZXRyaWNzOiBjcmVhdGVTdHJlYW1NZXRyaWNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yb3V0ZVJlc3VsdC5tZXRyaWNzLnJzY0Z1bGwuc3RyZWFtTWV0cmljcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkdXJhdGlvbjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzY0Z1bGxFbmRUaW1lIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlUmVzdWx0Lm1ldHJpY3MucnNjRnVsbC5zdHJlYW1NZXRyaWNzLnN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmRUaW1lOiByc2NGdWxsRW5kVGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgc3RyZWFtIGlzIGNvbnN1bWVkIGJ5IHRoZSBodG1sIHN0cmVhbVxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvcHRpb25zLm9uTWV0cmljcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uTWV0cmljcyhyc2NGdWxsTWV0cmljcyk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LmRhdGEuZmlsZVR5cGUgPT09IFwicnNjXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAvLyBVcGRhdGUgUlNDIG1ldHJpY3Mgd2l0aCBhY3R1YWwgZmlsZSBkYXRhXG4gICAgICAgICAgICAgICAgICAgICAgY29uc3QgcnNjRW5kVGltZSA9IHBlcmZvcm1hbmNlLm5vdygpO1xuICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJzY01ldHJpY3MgPSBjcmVhdGVSZW5kZXJNZXRyaWNzKHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlOiByb3V0ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHJvdXRlUmVzdWx0Lm1ldHJpY3MucnNjSGVhZGxlc3MudHlwZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZyb21NYWluVGhyZWFkOlxuICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZVJlc3VsdC5tZXRyaWNzLnJzY0hlYWRsZXNzLmZyb21NYWluVGhyZWFkLFxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbVJzY1dvcmtlcjpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVSZXN1bHQubWV0cmljcy5yc2NIZWFkbGVzcy5mcm9tUnNjV29ya2VyLFxuICAgICAgICAgICAgICAgICAgICAgICAgZnJvbUh0bWxXb3JrZXI6XG4gICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlUmVzdWx0Lm1ldHJpY3MucnNjSGVhZGxlc3MuZnJvbUh0bWxXb3JrZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICBmaWxlU2l6ZTogZXZlbnQuZGF0YS5jb250ZW50Lmxlbmd0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rczogZXZlbnQuZGF0YS5jaHVua3MgfHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb2Nlc3NpbmdUaW1lOlxuICAgICAgICAgICAgICAgICAgICAgICAgICByc2NFbmRUaW1lIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVSZXN1bHQubWV0cmljcy5yc2NIZWFkbGVzcy5zdHJlYW1NZXRyaWNzXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rUmF0ZTpcbiAgICAgICAgICAgICAgICAgICAgICAgICAgKGV2ZW50LmRhdGEuY2h1bmtzIHx8IDApIC9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgKChyc2NFbmRUaW1lIC1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByb3V0ZVJlc3VsdC5tZXRyaWNzLnJzY0hlYWRsZXNzLnN0cmVhbU1ldHJpY3NcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5zdGFydFRpbWUpIC9cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAxMDAwKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpbGVOYW1lOiBldmVudC5kYXRhLmZpbGVOYW1lLFxuICAgICAgICAgICAgICAgICAgICAgICAgb3V0cHV0UGF0aDogZXZlbnQuZGF0YS5wYXRoLFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFzZURpcjogZXZlbnQuZGF0YS5iYXNlRGlyLFxuICAgICAgICAgICAgICAgICAgICAgICAgcm91dGVQYXRoOiBldmVudC5kYXRhLnJvdXRlUGF0aCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmVhbU1ldHJpY3M6IGNyZWF0ZVN0cmVhbU1ldHJpY3Moe1xuICAgICAgICAgICAgICAgICAgICAgICAgICAuLi5yb3V0ZVJlc3VsdC5tZXRyaWNzLnJzY0hlYWRsZXNzLnN0cmVhbU1ldHJpY3MsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGNodW5rczogZXZlbnQuZGF0YS5jaHVua3MgfHwgMCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXM6IGV2ZW50LmRhdGEuY29udGVudC5sZW5ndGgsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIGR1cmF0aW9uOlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJzY0VuZFRpbWUgLVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvdXRlUmVzdWx0Lm1ldHJpY3MucnNjSGVhZGxlc3Muc3RyZWFtTWV0cmljc1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnN0YXJ0VGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgZW5kVGltZTogcnNjRW5kVGltZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICAgICAgICAgICAgaWYgKG9wdGlvbnMub25NZXRyaWNzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zLm9uTWV0cmljcyhyc2NNZXRyaWNzKTtcbiAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgLy8gQ3JlYXRlIGEgd3JhcHBlciB0aGF0IGNhbGxzIHRoZSByZW5kZXJQYWdlJ3MgZXZlbnQgaGFuZGxlclxuICAgICAgICAgICAgICBjb25zdCByZW5kZXJQYWdlT25FdmVudCA9IChldmVudDogYW55KSA9PiB7XG4gICAgICAgICAgICAgICAgLy8gVGhpcyB3aWxsIGJlIGNhbGxlZCBieSB0aGUgcmVuZGVyUGFnZSBmdW5jdGlvbidzIGV2ZW50IGhhbmRsZXJcbiAgICAgICAgICAgICAgICB3cmFwcGVyT25FdmVudChldmVudCk7XG4gICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgY29uc3QgcnNjV3JpdGVQcm9taXNlID0gZmlsZVdyaXRlcihcbiAgICAgICAgICAgICAgICByZXN1bHQucnNjIGFzIGFueSxcbiAgICAgICAgICAgICAgICBcInJzY1wiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICAgICAgICAgIG9uRXZlbnQ6IHJlbmRlclBhZ2VPbkV2ZW50LFxuICAgICAgICAgICAgICAgICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgY29uc3QgaHRtbFdyaXRlUHJvbWlzZSA9IGZpbGVXcml0ZXIoXG4gICAgICAgICAgICAgICAgcmVzdWx0Lmh0bWwgYXMgYW55LFxuICAgICAgICAgICAgICAgIFwiaHRtbFwiLFxuICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgIC4uLm9wdGlvbnMsXG4gICAgICAgICAgICAgICAgICByb3V0ZSxcbiAgICAgICAgICAgICAgICAgIG9uRXZlbnQ6IHJlbmRlclBhZ2VPbkV2ZW50LFxuICAgICAgICAgICAgICAgICAgbG9nZ2VyOiBvcHRpb25zLmxvZ2dlcixcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIG9wdGlvbnMuc2lnbmFsXG4gICAgICAgICAgICAgICk7XG5cbiAgICAgICAgICAgICAgLy8gV2FpdCBmb3IgYm90aCBSU0MgYW5kIEhUTUwgZmlsZXMgdG8gYmUgd3JpdHRlblxuICAgICAgICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbcnNjV3JpdGVQcm9taXNlLCBodG1sV3JpdGVQcm9taXNlXSk7XG5cbiAgICAgICAgICAgICAgLy8gQ2xlYW4gdXAgYWN0aXZlIHN0cmVhbXMgYWZ0ZXIgc3VjY2Vzc2Z1bCBjb21wbGV0aW9uXG4gICAgICAgICAgICAgIGFjdGl2ZVN0cmVhbXMuZGVsZXRlKHJvdXRlKTtcblxuICAgICAgICAgICAgICAvLyBNZXRyaWNzIGFyZSBub3cgaGFuZGxlZCBieSB0aGUgaW5kaXZpZHVhbCByZW5kZXJQYWdlIGZ1bmN0aW9uc1xuICAgICAgICAgICAgICAvLyBObyBuZWVkIHRvIGR1cGxpY2F0ZSBtZXRyaWNzIGNvbGxlY3Rpb24gaGVyZVxuXG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmxvZ2dlcj8uaW5mbyhcbiAgICAgICAgICAgICAgICAgIGBbcmVuZGVyUGFnZXNdIFN1Y2Nlc3NmdWxseSB3cm90ZSBmaWxlcyBmb3Igcm91dGU6ICR7cm91dGV9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgICAgICBvcHRpb25zLmxvZ2dlcj8uZXJyb3IoXG4gICAgICAgICAgICAgICAgICBgW3JlbmRlclBhZ2VzXSBGYWlsZWQgdG8gd3JpdGUgZmlsZXMgZm9yIHJvdXRlOiAke3JvdXRlfTogJHtlcnJvcn1gXG4gICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAvLyBJZiBmaWxlIHdyaXRpbmcgZmFpbHMsIHRyZWF0IGl0IGFzIGEgZmFpbGVkIHJvdXRlXG4gICAgICAgICAgICAgIGZhaWxlZFJvdXRlcy5zZXQocm91dGUsIGVycm9yKTtcbiAgICAgICAgICAgICAgY29tcGxldGVkUm91dGVzLmRlbGV0ZShyb3V0ZSk7XG4gICAgICAgICAgICAgIHJlc3VsdHMuZGVsZXRlKHJvdXRlKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gWWllbGQgYWZ0ZXIgZWFjaCBwYWdlIGlzIGNvbXBsZXRlZFxuICAgICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICAgICAgICAgICAgcm91dGU6IHJvdXRlLFxuICAgICAgICAgICAgICBjb21wbGV0ZWRSb3V0ZXMsXG4gICAgICAgICAgICAgIGZhaWxlZFJvdXRlcyxcbiAgICAgICAgICAgICAgcmVzdWx0cyxcbiAgICAgICAgICAgIH0gc2F0aXNmaWVzIFJlbmRlclBhZ2VzUmVzdWx0O1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnN0IHBhbmljRXJyb3IgPSBoYW5kbGVFcnJvcih7XG4gICAgICAgICAgZXJyb3I6IGVycixcbiAgICAgICAgICBsb2dnZXI6IG9wdGlvbnMubG9nZ2VyLFxuICAgICAgICAgIHBhbmljVGhyZXNob2xkOiBvcHRpb25zLnBhbmljVGhyZXNob2xkLFxuICAgICAgICAgIGNvbnRleHQ6IGByZW5kZXJQYWdlcygke3JvdXRlfSlgLFxuICAgICAgICB9KTtcblxuICAgICAgICAvLyBJZiB0aGlzIGlzIGEgcGFuaWMgZXJyb3IsIHlpZWxkIGl0IGltbWVkaWF0ZWx5IHRvIGZhaWwgdGhlIGJ1aWxkXG4gICAgICAgIGlmIChwYW5pY0Vycm9yICE9IG51bGwpIHtcbiAgICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgICAgICBlcnJvcjogcGFuaWNFcnJvcixcbiAgICAgICAgICAgIHJvdXRlOiByb3V0ZSxcbiAgICAgICAgICAgIGZhaWxlZFJvdXRlcyxcbiAgICAgICAgICAgIGNvbXBsZXRlZFJvdXRlcyxcbiAgICAgICAgICAgIHJlc3VsdHMsXG4gICAgICAgICAgfSBzYXRpc2ZpZXMgUmVuZGVyUGFnZXNSZXN1bHQ7XG4gICAgICAgICAgYnJlYWs7IC8vIFN0b3AgcHJvY2Vzc2luZyBhZGRpdGlvbmFsIHJvdXRlcyBmb3IgcGFuaWMgZXJyb3JzXG4gICAgICAgIH1cblxuICAgICAgICAvLyBDbGVhbiB1cCBhbnkgcmVzb3VyY2VzIHRoYXQgbWlnaHQgaGF2ZSBiZWVuIGNyZWF0ZWRcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAvLyBDbGVhciBhbnkgY2FjaGVkIHN0YXRlIGZvciB0aGlzIHJvdXRlXG4gICAgICAgICAgcmVzdWx0cy5kZWxldGUocm91dGUpO1xuICAgICAgICAgIGNvbXBsZXRlZFJvdXRlcy5kZWxldGUocm91dGUpO1xuXG4gICAgICAgICAgLy8gQWRkIHRvIGZhaWxlZCByb3V0ZXMgZm9yIG5vbi1wYW5pYyBlcnJvcnNcbiAgICAgICAgICBmYWlsZWRSb3V0ZXMuc2V0KHJvdXRlLCBlcnIpO1xuICAgICAgICB9IGNhdGNoIChjbGVhbnVwRXJyb3IpIHtcbiAgICAgICAgICBvcHRpb25zLmxvZ2dlcj8ud2FybihcbiAgICAgICAgICAgIGBGYWlsZWQgdG8gY2xlYW51cCByZXNvdXJjZXMgZm9yIHJvdXRlICR7cm91dGV9OiAke2NsZWFudXBFcnJvcn1gXG4gICAgICAgICAgKTtcbiAgICAgICAgfVxuXG4gICAgICAgIHlpZWxkIHtcbiAgICAgICAgICB0eXBlOiBcInN1Y2Nlc3NcIiwgLy8gQ2hhbmdlIGZyb20gZXJyb3IgdG8gc3VjY2VzcyBmb3Igbm9uLXBhbmljIHJvdXRlIGVycm9yc1xuICAgICAgICAgIHJvdXRlOiByb3V0ZSxcbiAgICAgICAgICBmYWlsZWRSb3V0ZXMsXG4gICAgICAgICAgY29tcGxldGVkUm91dGVzLFxuICAgICAgICAgIHJlc3VsdHMsXG4gICAgICAgIH0gc2F0aXNmaWVzIFJlbmRlclBhZ2VzUmVzdWx0O1xuXG4gICAgICAgIC8vIEZvciBwYW5pY1RocmVzaG9sZDogXCJub25lXCIsIHN0b3AgcHJvY2Vzc2luZyBhZGRpdGlvbmFsIHJvdXRlcyB3aGVuIHRoZXJlJ3MgYW4gZXJyb3JcbiAgICAgICAgLy8gVGhpcyBwcmV2ZW50cyB0aGUgYnVpbGQgZnJvbSBjb250aW51aW5nIHdpdGggYnJva2VuIHBhZ2VzXG4gICAgICAgIGlmIChvcHRpb25zLnBhbmljVGhyZXNob2xkID09PSBcIm5vbmVcIikge1xuICAgICAgICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgICAgICAgIG9wdGlvbnMubG9nZ2VyLmluZm8oXG4gICAgICAgICAgICAgIGBbcmVuZGVyUGFnZXNdIFN0b3BwaW5nIHJlbmRlciBsb29wIGR1ZSB0byBlcnJvciB3aXRoIHBhbmljVGhyZXNob2xkOiBcIm5vbmVcImBcbiAgICAgICAgICAgICk7XG4gICAgICAgICAgfVxuICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgb3B0aW9ucy5sb2dnZXIuaW5mbyhcbiAgICAgICAgYFtyZW5kZXJQYWdlc10gRmluYWwgc3RhdGUgLSBjb21wbGV0ZWRSb3V0ZXM6ICR7Y29tcGxldGVkUm91dGVzLnNpemV9LCBmYWlsZWRSb3V0ZXM6ICR7ZmFpbGVkUm91dGVzLnNpemV9YFxuICAgICAgKTtcbiAgICB9XG5cbiAgICAvLyBBbHdheXMgeWllbGQgYSBmaW5hbCByZXN1bHQgYmVmb3JlIGNoZWNraW5nIHBhbmljIHRocmVzaG9sZFxuICAgIHlpZWxkIHtcbiAgICAgIHR5cGU6IFwic3VjY2Vzc1wiLFxuICAgICAgcm91dGU6IFwiXCIsIC8vIE5vIHNwZWNpZmljIHJvdXRlIGZvciBmaW5hbCByZXN1bHRcbiAgICAgIGNvbXBsZXRlZFJvdXRlcyxcbiAgICAgIGZhaWxlZFJvdXRlcyxcbiAgICAgIHJlc3VsdHMsXG4gICAgfSBzYXRpc2ZpZXMgUmVuZGVyUGFnZXNSZXN1bHQ7XG5cbiAgICBpZiAob3B0aW9ucy52ZXJib3NlKSB7XG4gICAgICBvcHRpb25zLmxvZ2dlci5pbmZvKGBbcmVuZGVyUGFnZXNdIFJldHVybmluZyBzdWNjZXNzIHJlc3VsdGApO1xuICAgIH1cblxuICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgIG9wdGlvbnMubG9nZ2VyLmluZm8oYFtyZW5kZXJQYWdlc10gQWJvdXQgdG8gcmV0dXJuIHN1Y2Nlc3MgcmVzdWx0YCk7XG4gICAgfVxuXG4gICAgLy8gVXNlIGNlbnRyYWxpemVkIHBhbmljIHRocmVzaG9sZCBsb2dpY1xuICAgIGNvbnN0IHNob3VsZFBhbmljID0gZmFpbGVkUm91dGVzLnNpemUgPiAwICYmIHNob3VsZENhdXNlUGFuaWMoXG4gICAgICBBcnJheS5mcm9tKGZhaWxlZFJvdXRlcy52YWx1ZXMoKSlbMF0sIC8vIENoZWNrIGZpcnN0IGZhaWxlZCByb3V0ZVxuICAgICAgeyBwYW5pY1RocmVzaG9sZDogb3B0aW9ucy5wYW5pY1RocmVzaG9sZCB9XG4gICAgKTtcblxuICAgIGlmIChvcHRpb25zLnZlcmJvc2UpIHtcbiAgICAgIG9wdGlvbnMubG9nZ2VyPy5pbmZvKFxuICAgICAgICBgW3JlbmRlclBhZ2VzXSBQYW5pYyBjaGVjayAtIGZhaWxlZFJvdXRlcy5zaXplOiAke2ZhaWxlZFJvdXRlcy5zaXplfSwgcGFuaWNUaHJlc2hvbGQ6ICR7b3B0aW9ucy5wYW5pY1RocmVzaG9sZH0sIHNob3VsZFBhbmljOiAke3Nob3VsZFBhbmljfWBcbiAgICAgICk7XG4gICAgfVxuXG4gICAgaWYgKHNob3VsZFBhbmljKSB7XG4gICAgICBjb25zdCBmaXJzdEVycm9yID0gQXJyYXkuZnJvbShmYWlsZWRSb3V0ZXMudmFsdWVzKCkpWzBdO1xuICAgICAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICAgICAgICBvcHRpb25zLmxvZ2dlcj8uZXJyb3IoXG4gICAgICAgICAgYFtyZW5kZXJQYWdlc10gWWllbGRpbmcgcGFuaWMgZXJyb3I6ICR7Zmlyc3RFcnJvciBpbnN0YW5jZW9mIEVycm9yID8gZmlyc3RFcnJvci5tZXNzYWdlIDogU3RyaW5nKGZpcnN0RXJyb3IpfWBcbiAgICAgICAgKTtcbiAgICAgIH1cbiAgICAgIC8vIFVzZSB5aWVsZCBmb3IgcGFuaWMgZXJyb3JzIHRvIG1haW50YWluIHN0cmVhbSBjb250cmFjdFxuICAgICAgeWllbGQge1xuICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgIGVycm9yOiBmaXJzdEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBmaXJzdEVycm9yIDogbmV3IEVycm9yKFN0cmluZyhmaXJzdEVycm9yKSksXG4gICAgICAgIHJvdXRlOiBcIlwiLCAvLyBObyBzcGVjaWZpYyByb3V0ZSBmb3IgZ2xvYmFsIHBhbmljXG4gICAgICAgIGNvbXBsZXRlZFJvdXRlcyxcbiAgICAgICAgZmFpbGVkUm91dGVzLFxuICAgICAgICByZXN1bHRzLFxuICAgICAgfSBzYXRpc2ZpZXMgUmVuZGVyUGFnZXNSZXN1bHQ7XG4gICAgICByZXR1cm4ge1xuICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgIGVycm9yOiBmaXJzdEVycm9yIGluc3RhbmNlb2YgRXJyb3IgPyBmaXJzdEVycm9yIDogbmV3IEVycm9yKFN0cmluZyhmaXJzdEVycm9yKSksXG4gICAgICAgIHJvdXRlOiBcIlwiLFxuICAgICAgICBjb21wbGV0ZWRSb3V0ZXMsXG4gICAgICAgIGZhaWxlZFJvdXRlcyxcbiAgICAgICAgcmVzdWx0cyxcbiAgICAgIH0gc2F0aXNmaWVzIFJlbmRlclBhZ2VzUmVzdWx0O1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICAgIGNvbXBsZXRlZFJvdXRlcyxcbiAgICAgIGZhaWxlZFJvdXRlczogZmFpbGVkUm91dGVzLFxuICAgICAgcmVzdWx0cyxcbiAgICB9IHNhdGlzZmllcyBSZW5kZXJQYWdlc1Jlc3VsdDtcbiAgfSkoKTtcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFzQkEsU0FBUyx1QkFBQSxDQUF3QixNQUFjLFFBQTRCLEVBQUE7QUFDekUsRUFBTSxNQUFBLEtBQUEsR0FBUSxTQUFTLElBQUksQ0FBQTtBQUMzQixFQUFJLElBQUEsS0FBQSxJQUFTLE1BQU0sSUFBTSxFQUFBO0FBQ3ZCLElBQUEsT0FBTyxLQUFNLENBQUEsSUFBQTtBQUFBO0FBRWYsRUFBTyxPQUFBLElBQUE7QUFDVDtBQVlPLE1BQU0sV0FBNkIsR0FBQSxDQUN4QyxNQUNBLEVBQUEsY0FBQSxFQUNBLFVBQ0csS0FBQTtBQUNILEVBQU0sTUFBQTtBQUFBLElBQ0osbUJBQUE7QUFBQSxJQUNBLGNBQUE7QUFBQSxJQUNBLFdBQVcsRUFBQztBQUFBLElBQ1osR0FBRztBQUFBLEdBQ0QsR0FBQSxjQUFBO0FBQ0osRUFBTSxNQUFBLGVBQUEsdUJBQXNCLEdBQVksRUFBQTtBQUN4QyxFQUFNLE1BQUEsWUFBQSx1QkFBbUIsR0FBcUIsRUFBQTtBQUM5QyxFQUFNLE1BQUEsYUFBQSx1QkFBb0IsR0FBeUcsRUFBQTtBQUVuSSxFQUFNLE1BQUEsT0FBQSx1QkFBYyxHQUE4QixFQUFBO0FBRWxELEVBQUksSUFBQSxDQUFDLG9CQUFvQixNQUFRLEVBQUE7QUFFL0IsSUFBQSxPQUFRLGdCQUFnQixZQUE4RSxHQUFB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
|