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.
Files changed (1165) hide show
  1. package/README.md +211 -59
  2. package/dist/client.d.ts +4 -0
  3. package/dist/client.d.ts.map +1 -1
  4. package/dist/client.js +4 -4
  5. package/dist/index.d.ts +3 -2
  6. package/dist/index.d.ts.map +1 -1
  7. package/dist/index.js +7 -10
  8. package/dist/package.json +102 -27
  9. package/dist/plugin/bundle/bundles.d.ts +11 -0
  10. package/dist/plugin/bundle/bundles.d.ts.map +1 -0
  11. package/dist/plugin/bundle/bundles.js +11 -0
  12. package/dist/plugin/bundle/deferredStaticGeneration.d.ts +31 -0
  13. package/dist/plugin/bundle/deferredStaticGeneration.d.ts.map +1 -0
  14. package/dist/plugin/bundle/deferredStaticGeneration.js +44 -0
  15. package/dist/plugin/bundle/manifests.d.ts +20 -0
  16. package/dist/plugin/bundle/manifests.d.ts.map +1 -0
  17. package/dist/plugin/bundle/manifests.js +54 -0
  18. package/dist/plugin/components/css.d.ts +2 -5
  19. package/dist/plugin/components/css.d.ts.map +1 -1
  20. package/dist/plugin/components/css.js +7 -9
  21. package/dist/plugin/components/html.d.ts +2 -3
  22. package/dist/plugin/components/html.d.ts.map +1 -1
  23. package/dist/plugin/components/html.js +3 -3
  24. package/dist/plugin/components/index.d.ts +1 -1
  25. package/dist/plugin/components/index.d.ts.map +1 -1
  26. package/dist/plugin/components/root.d.ts.map +1 -1
  27. package/dist/plugin/components/root.js +4 -4
  28. package/dist/plugin/config/autoDiscover/createGlobAutoDiscover.d.ts.map +1 -1
  29. package/dist/plugin/config/autoDiscover/createGlobAutoDiscover.js +6 -6
  30. package/dist/plugin/config/autoDiscover/pageAndPropFiles.d.ts.map +1 -1
  31. package/dist/plugin/config/autoDiscover/pageAndPropFiles.js +1 -1
  32. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts +6 -5
  33. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts.map +1 -1
  34. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.js +34 -51
  35. package/dist/plugin/config/autoDiscover/resolveBuildPages.d.ts +5 -1
  36. package/dist/plugin/config/autoDiscover/resolveBuildPages.d.ts.map +1 -1
  37. package/dist/plugin/config/autoDiscover/resolveBuildPages.js +124 -52
  38. package/dist/plugin/config/createHandlerOptions.client.d.ts +4 -0
  39. package/dist/plugin/config/createHandlerOptions.client.d.ts.map +1 -0
  40. package/dist/plugin/config/createHandlerOptions.client.js +293 -0
  41. package/dist/plugin/config/createHandlerOptions.d.ts +4 -0
  42. package/dist/plugin/config/createHandlerOptions.d.ts.map +1 -0
  43. package/dist/plugin/config/createHandlerOptions.js +13 -0
  44. package/dist/plugin/config/createHandlerOptions.server.d.ts +4 -0
  45. package/dist/plugin/config/createHandlerOptions.server.d.ts.map +1 -0
  46. package/dist/plugin/config/createHandlerOptions.server.js +344 -0
  47. package/dist/plugin/config/createHandlerOptions.types.d.ts +114 -0
  48. package/dist/plugin/config/createHandlerOptions.types.d.ts.map +1 -0
  49. package/dist/plugin/config/createModuleID.d.ts +1 -1
  50. package/dist/plugin/config/createModuleID.d.ts.map +1 -1
  51. package/dist/plugin/config/createModuleID.js +121 -8
  52. package/dist/plugin/config/defaults.d.ts +152 -17
  53. package/dist/plugin/config/defaults.d.ts.map +1 -1
  54. package/dist/plugin/config/defaults.js +69 -25
  55. package/dist/plugin/config/envPrefixFromConfig.d.ts +3 -0
  56. package/dist/plugin/config/envPrefixFromConfig.d.ts.map +1 -0
  57. package/dist/plugin/config/envPrefixFromConfig.js +8 -0
  58. package/dist/plugin/config/getCondition.d.ts +54 -3
  59. package/dist/plugin/config/getCondition.d.ts.map +1 -1
  60. package/dist/plugin/config/getCondition.js +158 -6
  61. package/dist/plugin/{getNodeEnv.d.ts → config/getNodeEnv.d.ts} +1 -1
  62. package/dist/plugin/config/getNodeEnv.d.ts.map +1 -0
  63. package/dist/plugin/config/getNodeEnv.js +17 -0
  64. package/dist/plugin/config/index.d.ts +43 -1
  65. package/dist/plugin/config/index.d.ts.map +1 -1
  66. package/dist/plugin/config/index.js +9 -4
  67. package/dist/plugin/config/resolveDirectiveMatcher.d.ts +6 -6
  68. package/dist/plugin/config/resolveDirectiveMatcher.d.ts.map +1 -1
  69. package/dist/plugin/config/resolveDirectiveMatcher.js +7 -23
  70. package/dist/plugin/config/resolveEnv.d.ts +1 -1
  71. package/dist/plugin/config/resolveEnv.d.ts.map +1 -1
  72. package/dist/plugin/config/resolveEnv.js +32 -28
  73. package/dist/plugin/config/resolveOptions.d.ts +3 -2
  74. package/dist/plugin/config/resolveOptions.d.ts.map +1 -1
  75. package/dist/plugin/config/resolveOptions.js +195 -61
  76. package/dist/plugin/config/resolvePages.d.ts +1 -1
  77. package/dist/plugin/config/resolvePages.d.ts.map +1 -1
  78. package/dist/plugin/config/resolvePages.js +1 -1
  79. package/dist/plugin/config/resolvePatternWithValues.d.ts.map +1 -1
  80. package/dist/plugin/config/resolvePatternWithValues.js +7 -26
  81. package/dist/plugin/config/resolveUrlOption.d.ts +1 -1
  82. package/dist/plugin/config/resolveUrlOption.d.ts.map +1 -1
  83. package/dist/plugin/config/resolveUrlOption.js +2 -2
  84. package/dist/plugin/config/resolveUserConfig.d.ts +5 -3
  85. package/dist/plugin/config/resolveUserConfig.d.ts.map +1 -1
  86. package/dist/plugin/config/resolveUserConfig.js +221 -70
  87. package/dist/plugin/config/stashedOptionsState.d.ts +66 -0
  88. package/dist/plugin/config/stashedOptionsState.d.ts.map +1 -0
  89. package/dist/plugin/config/stashedOptionsState.js +25 -0
  90. package/dist/plugin/dev-server/cleanupServerAction.client.d.ts +6 -0
  91. package/dist/plugin/dev-server/cleanupServerAction.client.d.ts.map +1 -0
  92. package/dist/plugin/dev-server/cleanupServerAction.client.js +28 -0
  93. package/dist/plugin/dev-server/cleanupServerAction.d.ts +2 -0
  94. package/dist/plugin/dev-server/cleanupServerAction.d.ts.map +1 -0
  95. package/dist/plugin/dev-server/cleanupServerAction.js +4 -0
  96. package/dist/plugin/dev-server/cleanupServerAction.server.d.ts +8 -0
  97. package/dist/plugin/dev-server/cleanupServerAction.server.d.ts.map +1 -0
  98. package/dist/plugin/dev-server/cleanupServerAction.server.js +15 -0
  99. package/dist/plugin/dev-server/configureReactServer.client.d.ts +7 -0
  100. package/dist/plugin/dev-server/configureReactServer.client.d.ts.map +1 -0
  101. package/dist/plugin/dev-server/configureReactServer.client.js +85 -0
  102. package/dist/plugin/dev-server/configureReactServer.d.ts +2 -0
  103. package/dist/plugin/dev-server/configureReactServer.d.ts.map +1 -0
  104. package/dist/plugin/dev-server/configureReactServer.js +13 -0
  105. package/dist/plugin/dev-server/configureReactServer.server.d.ts +3 -0
  106. package/dist/plugin/dev-server/configureReactServer.server.d.ts.map +1 -0
  107. package/dist/plugin/dev-server/configureReactServer.server.js +444 -0
  108. package/dist/plugin/dev-server/configureRequestHandler.client.d.ts +13 -0
  109. package/dist/plugin/dev-server/configureRequestHandler.client.d.ts.map +1 -0
  110. package/dist/plugin/dev-server/configureRequestHandler.client.js +307 -0
  111. package/dist/plugin/dev-server/configureRequestHandler.d.ts +2 -0
  112. package/dist/plugin/dev-server/configureRequestHandler.d.ts.map +1 -0
  113. package/dist/plugin/dev-server/configureRequestHandler.js +4 -0
  114. package/dist/plugin/dev-server/configureRequestHandler.server.d.ts +6 -0
  115. package/dist/plugin/dev-server/configureRequestHandler.server.d.ts.map +1 -0
  116. package/dist/plugin/dev-server/configureRequestHandler.server.js +44 -0
  117. package/dist/plugin/dev-server/handleServerAction.client.d.ts +11 -0
  118. package/dist/plugin/dev-server/handleServerAction.client.d.ts.map +1 -0
  119. package/dist/plugin/dev-server/handleServerAction.client.js +97 -0
  120. package/dist/plugin/dev-server/handleServerAction.d.ts +2 -0
  121. package/dist/plugin/dev-server/handleServerAction.d.ts.map +1 -0
  122. package/dist/plugin/dev-server/handleServerAction.js +13 -0
  123. package/dist/plugin/dev-server/handleServerAction.server.d.ts +3 -0
  124. package/dist/plugin/dev-server/handleServerAction.server.d.ts.map +1 -0
  125. package/dist/plugin/dev-server/handleServerAction.server.js +15 -0
  126. package/dist/plugin/dev-server/index.client.d.ts +7 -0
  127. package/dist/plugin/dev-server/index.client.d.ts.map +1 -0
  128. package/dist/plugin/dev-server/index.client.js +11 -0
  129. package/dist/plugin/dev-server/index.d.ts +4 -0
  130. package/dist/plugin/dev-server/index.d.ts.map +1 -0
  131. package/dist/plugin/dev-server/index.js +19 -0
  132. package/dist/plugin/dev-server/index.server.d.ts +7 -0
  133. package/dist/plugin/dev-server/index.server.d.ts.map +1 -0
  134. package/dist/plugin/dev-server/index.server.js +11 -0
  135. package/dist/plugin/dev-server/plugin.client.d.ts +7 -0
  136. package/dist/plugin/dev-server/plugin.client.d.ts.map +1 -0
  137. package/dist/plugin/dev-server/plugin.client.js +122 -0
  138. package/dist/plugin/dev-server/plugin.server.d.ts +8 -0
  139. package/dist/plugin/dev-server/plugin.server.d.ts.map +1 -0
  140. package/dist/plugin/dev-server/plugin.server.js +108 -0
  141. package/dist/plugin/dev-server/restartWorker.client.d.ts +3 -0
  142. package/dist/plugin/dev-server/restartWorker.client.d.ts.map +1 -0
  143. package/dist/plugin/dev-server/restartWorker.client.js +131 -0
  144. package/dist/plugin/dev-server/restartWorker.d.ts +2 -0
  145. package/dist/plugin/dev-server/restartWorker.d.ts.map +1 -0
  146. package/dist/plugin/dev-server/restartWorker.js +4 -0
  147. package/dist/plugin/dev-server/restartWorker.server.d.ts +3 -0
  148. package/dist/plugin/dev-server/restartWorker.server.d.ts.map +1 -0
  149. package/dist/plugin/dev-server/restartWorker.server.js +88 -0
  150. package/dist/plugin/dev-server/types.d.ts +38 -0
  151. package/dist/plugin/dev-server/types.d.ts.map +1 -0
  152. package/dist/plugin/dev-server/virtualRscHmrPlugin.d.ts +7 -0
  153. package/dist/plugin/dev-server/virtualRscHmrPlugin.d.ts.map +1 -0
  154. package/dist/plugin/dev-server/virtualRscHmrPlugin.js +80 -0
  155. package/dist/plugin/env/createConfigEnv.d.ts +13 -0
  156. package/dist/plugin/env/createConfigEnv.d.ts.map +1 -0
  157. package/dist/plugin/env/createConfigEnv.js +43 -0
  158. package/dist/plugin/env/createEnvPlugin.d.ts +3 -0
  159. package/dist/plugin/env/createEnvPlugin.d.ts.map +1 -0
  160. package/dist/plugin/env/createEnvPlugin.js +59 -0
  161. package/dist/plugin/env/getArgValue.d.ts +8 -0
  162. package/dist/plugin/env/getArgValue.d.ts.map +1 -0
  163. package/dist/plugin/env/getArgValue.js +52 -0
  164. package/dist/plugin/env/getEnvKey.d.ts +46 -0
  165. package/dist/plugin/env/getEnvKey.d.ts.map +1 -0
  166. package/dist/plugin/env/getEnvKey.js +32 -0
  167. package/dist/plugin/env/index.d.ts +5 -0
  168. package/dist/plugin/env/index.d.ts.map +1 -1
  169. package/dist/plugin/env/index.js +7 -0
  170. package/dist/plugin/env/plugin.client.d.ts +2 -0
  171. package/dist/plugin/env/plugin.client.d.ts.map +1 -0
  172. package/dist/plugin/env/plugin.client.js +2 -0
  173. package/dist/plugin/env/plugin.d.ts +4 -34
  174. package/dist/plugin/env/plugin.d.ts.map +1 -1
  175. package/dist/plugin/env/plugin.js +27 -102
  176. package/dist/plugin/env/plugin.server.d.ts +2 -0
  177. package/dist/plugin/env/plugin.server.d.ts.map +1 -0
  178. package/dist/plugin/env/plugin.server.js +2 -0
  179. package/dist/plugin/env/userConfigEnv.d.ts +2 -0
  180. package/dist/plugin/env/userConfigEnv.d.ts.map +1 -0
  181. package/dist/plugin/env/userConfigEnv.js +12 -0
  182. package/dist/plugin/environments/createBuildEventPlugin.d.ts +4 -0
  183. package/dist/plugin/environments/createBuildEventPlugin.d.ts.map +1 -0
  184. package/dist/plugin/environments/createBuildEventPlugin.js +100 -0
  185. package/dist/plugin/environments/createEnvironmentPlugin.d.ts +19 -0
  186. package/dist/plugin/environments/createEnvironmentPlugin.d.ts.map +1 -0
  187. package/dist/plugin/environments/createEnvironmentPlugin.js +257 -0
  188. package/dist/plugin/environments/hashCoordination.d.ts +14 -0
  189. package/dist/plugin/environments/hashCoordination.d.ts.map +1 -0
  190. package/dist/plugin/environments/hashCoordination.js +35 -0
  191. package/dist/plugin/environments/resolveEnvironmentConfig.d.ts +41 -0
  192. package/dist/plugin/environments/resolveEnvironmentConfig.d.ts.map +1 -0
  193. package/dist/plugin/environments/resolveEnvironmentConfig.js +232 -0
  194. package/dist/plugin/error/assertPanic.d.ts +2 -0
  195. package/dist/plugin/error/assertPanic.d.ts.map +1 -0
  196. package/dist/plugin/error/assertPanic.js +15 -0
  197. package/dist/plugin/error/handleError.d.ts +9 -0
  198. package/dist/plugin/error/handleError.d.ts.map +1 -0
  199. package/dist/plugin/error/handleError.js +51 -0
  200. package/dist/plugin/error/index.d.ts +3 -0
  201. package/dist/plugin/error/index.d.ts.map +1 -1
  202. package/dist/plugin/error/index.js +4 -1
  203. package/dist/plugin/error/logError.d.ts +6 -2
  204. package/dist/plugin/error/logError.d.ts.map +1 -1
  205. package/dist/plugin/error/logError.js +35 -34
  206. package/dist/plugin/error/panicThresholdHandler.d.ts +27 -0
  207. package/dist/plugin/error/panicThresholdHandler.d.ts.map +1 -0
  208. package/dist/plugin/error/panicThresholdHandler.js +13 -0
  209. package/dist/plugin/error/serializeError.d.ts +6 -2
  210. package/dist/plugin/error/serializeError.d.ts.map +1 -1
  211. package/dist/plugin/error/serializeError.js +30 -10
  212. package/dist/plugin/error/serializeErrorInfo.d.ts +5 -0
  213. package/dist/plugin/error/serializeErrorInfo.d.ts.map +1 -0
  214. package/dist/plugin/error/serializeErrorInfo.js +19 -0
  215. package/dist/plugin/error/setupGlobalErrorHandler.d.ts +4 -0
  216. package/dist/plugin/error/setupGlobalErrorHandler.d.ts.map +1 -0
  217. package/dist/plugin/error/setupGlobalErrorHandler.js +52 -0
  218. package/dist/plugin/error/shouldPanic.d.ts +6 -0
  219. package/dist/plugin/error/shouldPanic.d.ts.map +1 -0
  220. package/dist/plugin/error/shouldPanic.js +15 -0
  221. package/dist/plugin/error/toError.d.ts +5 -1
  222. package/dist/plugin/error/toError.d.ts.map +1 -1
  223. package/dist/plugin/error/toError.js +43 -19
  224. package/dist/plugin/error/types.d.ts +28 -0
  225. package/dist/plugin/error/types.d.ts.map +1 -0
  226. package/dist/plugin/helpers/collectManifestCss.d.ts.map +1 -1
  227. package/dist/plugin/helpers/collectManifestCss.js +19 -5
  228. package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts +3 -3
  229. package/dist/plugin/helpers/collectViteModuleGraphCss.d.ts.map +1 -1
  230. package/dist/plugin/helpers/collectViteModuleGraphCss.js +64 -3
  231. package/dist/plugin/helpers/createBufferedRscStream.d.ts +52 -0
  232. package/dist/plugin/helpers/createBufferedRscStream.d.ts.map +1 -0
  233. package/dist/plugin/helpers/createBufferedRscStream.js +147 -0
  234. package/dist/plugin/helpers/createCssProps.d.ts.map +1 -1
  235. package/dist/plugin/helpers/createCssProps.js +15 -25
  236. package/dist/plugin/helpers/createElementWithReact.d.ts +9 -0
  237. package/dist/plugin/helpers/createElementWithReact.d.ts.map +1 -0
  238. package/dist/plugin/helpers/createElementWithReact.js +87 -0
  239. package/dist/plugin/helpers/createPatternMatcher.d.ts +24 -0
  240. package/dist/plugin/helpers/createPatternMatcher.d.ts.map +1 -0
  241. package/dist/plugin/helpers/createPatternMatcher.js +50 -0
  242. package/dist/plugin/helpers/createRscRenderHelpers.d.ts +16 -0
  243. package/dist/plugin/helpers/createRscRenderHelpers.d.ts.map +1 -0
  244. package/dist/plugin/helpers/createRscRenderHelpers.js +60 -0
  245. package/dist/plugin/helpers/createSafePageComponent.d.ts +36 -0
  246. package/dist/plugin/helpers/createSafePageComponent.d.ts.map +1 -0
  247. package/dist/plugin/helpers/createSafePageComponent.js +50 -0
  248. package/dist/plugin/helpers/createSerializableHandlerOptions.d.ts +60 -0
  249. package/dist/plugin/helpers/createSerializableHandlerOptions.d.ts.map +1 -0
  250. package/dist/plugin/helpers/createSerializableHandlerOptions.js +94 -0
  251. package/dist/plugin/helpers/createSharedLoader.d.ts +44 -0
  252. package/dist/plugin/helpers/createSharedLoader.d.ts.map +1 -0
  253. package/dist/plugin/helpers/createSharedLoader.js +137 -0
  254. package/dist/plugin/helpers/createUnifiedCssProcessor.d.ts +70 -0
  255. package/dist/plugin/helpers/createUnifiedCssProcessor.d.ts.map +1 -0
  256. package/dist/plugin/helpers/createUnifiedCssProcessor.js +89 -0
  257. package/dist/plugin/helpers/getBundleManifest.d.ts.map +1 -1
  258. package/dist/plugin/helpers/getBundleManifest.js +2 -3
  259. package/dist/plugin/helpers/getRouteFiles.d.ts +2 -2
  260. package/dist/plugin/helpers/getRouteFiles.d.ts.map +1 -1
  261. package/dist/plugin/helpers/getRouteFiles.js +67 -36
  262. package/dist/plugin/helpers/handleServerAction.client.d.ts +29 -0
  263. package/dist/plugin/helpers/handleServerAction.client.d.ts.map +1 -0
  264. package/dist/plugin/helpers/handleServerAction.client.js +93 -0
  265. package/dist/plugin/helpers/handleServerAction.d.ts +2 -34
  266. package/dist/plugin/helpers/handleServerAction.d.ts.map +1 -1
  267. package/dist/plugin/helpers/handleServerAction.js +15 -44
  268. package/dist/plugin/helpers/handleServerAction.server.d.ts +25 -0
  269. package/dist/plugin/helpers/handleServerAction.server.d.ts.map +1 -0
  270. package/dist/plugin/helpers/handleServerAction.server.js +80 -0
  271. package/dist/plugin/helpers/handleServerActionHelper.d.ts +61 -0
  272. package/dist/plugin/helpers/handleServerActionHelper.d.ts.map +1 -0
  273. package/dist/plugin/helpers/handleServerActionHelper.js +183 -0
  274. package/dist/plugin/helpers/headlessStreamReuseHandler.d.ts +12 -0
  275. package/dist/plugin/helpers/headlessStreamReuseHandler.d.ts.map +1 -0
  276. package/dist/plugin/helpers/headlessStreamReuseHandler.js +29 -0
  277. package/dist/plugin/helpers/headlessStreamState.d.ts +71 -0
  278. package/dist/plugin/helpers/headlessStreamState.d.ts.map +1 -0
  279. package/dist/plugin/helpers/headlessStreamState.js +81 -0
  280. package/dist/plugin/helpers/hydrateUserOptions.d.ts +1 -1
  281. package/dist/plugin/helpers/hydrateUserOptions.d.ts.map +1 -1
  282. package/dist/plugin/helpers/hydrateUserOptions.js +2 -2
  283. package/dist/plugin/helpers/index.d.ts +12 -5
  284. package/dist/plugin/helpers/index.d.ts.map +1 -1
  285. package/dist/plugin/helpers/index.js +18 -4
  286. package/dist/plugin/helpers/logRenderStart.d.ts +17 -0
  287. package/dist/plugin/helpers/logRenderStart.d.ts.map +1 -0
  288. package/dist/plugin/helpers/logRenderStart.js +13 -0
  289. package/dist/plugin/helpers/mergeMessageWithDefaults.d.ts +90 -0
  290. package/dist/plugin/helpers/mergeMessageWithDefaults.d.ts.map +1 -0
  291. package/dist/plugin/helpers/mergeMessageWithDefaults.js +67 -0
  292. package/dist/plugin/helpers/pipeToResponse.d.ts +19 -0
  293. package/dist/plugin/helpers/pipeToResponse.d.ts.map +1 -0
  294. package/dist/plugin/helpers/pipeToResponse.js +55 -0
  295. package/dist/plugin/helpers/requestInfo.d.ts +6 -4
  296. package/dist/plugin/helpers/requestInfo.d.ts.map +1 -1
  297. package/dist/plugin/helpers/requestInfo.js +48 -30
  298. package/dist/plugin/helpers/resolveComponents.client.d.ts +34 -0
  299. package/dist/plugin/helpers/resolveComponents.client.d.ts.map +1 -0
  300. package/dist/plugin/helpers/resolveComponents.client.js +126 -0
  301. package/dist/plugin/helpers/resolveModuleFromManifest.d.ts +36 -0
  302. package/dist/plugin/helpers/resolveModuleFromManifest.d.ts.map +1 -0
  303. package/dist/plugin/helpers/resolveModuleFromManifest.js +60 -0
  304. package/dist/plugin/helpers/resolvePageAndProps.d.ts +23 -2
  305. package/dist/plugin/helpers/resolvePageAndProps.d.ts.map +1 -1
  306. package/dist/plugin/helpers/resolvePageAndProps.js +150 -9
  307. package/dist/plugin/helpers/resolveRenderUrl.d.ts +11 -0
  308. package/dist/plugin/helpers/resolveRenderUrl.d.ts.map +1 -0
  309. package/dist/plugin/helpers/resolveRenderUrl.js +19 -0
  310. package/dist/plugin/helpers/resolveStreamElements.client.d.ts +14 -0
  311. package/dist/plugin/helpers/resolveStreamElements.client.d.ts.map +1 -0
  312. package/dist/plugin/helpers/resolveStreamElements.client.js +36 -0
  313. package/dist/plugin/helpers/resolveStreamElements.d.ts +3 -0
  314. package/dist/plugin/helpers/resolveStreamElements.d.ts.map +1 -0
  315. package/dist/plugin/helpers/resolveStreamElements.js +13 -0
  316. package/dist/plugin/helpers/resolveStreamElements.server.d.ts +15 -0
  317. package/dist/plugin/helpers/resolveStreamElements.server.d.ts.map +1 -0
  318. package/dist/plugin/helpers/resolveStreamElements.server.js +35 -0
  319. package/dist/plugin/helpers/resolveStreamElements.types.d.ts +22 -0
  320. package/dist/plugin/helpers/resolveStreamElements.types.d.ts.map +1 -0
  321. package/dist/plugin/helpers/resolveStreamElements.types.js +1 -0
  322. package/dist/plugin/helpers/resolveVirtualAndNodeModules.d.ts +15 -0
  323. package/dist/plugin/helpers/resolveVirtualAndNodeModules.d.ts.map +1 -0
  324. package/dist/plugin/helpers/resolveVirtualAndNodeModules.js +45 -0
  325. package/dist/plugin/helpers/resolveWithDefaultRootAndHtml.d.ts +18 -0
  326. package/dist/plugin/helpers/resolveWithDefaultRootAndHtml.d.ts.map +1 -0
  327. package/dist/plugin/helpers/resolveWithDefaultRootAndHtml.js +17 -0
  328. package/dist/plugin/helpers/serializeUserOptions.d.ts +2 -2
  329. package/dist/plugin/helpers/serializeUserOptions.d.ts.map +1 -1
  330. package/dist/plugin/helpers/serializeUserOptions.js +28 -13
  331. package/dist/plugin/helpers/tryManifest.d.ts +2 -2
  332. package/dist/plugin/helpers/tryManifest.d.ts.map +1 -1
  333. package/dist/plugin/helpers/tryManifest.js +12 -6
  334. package/dist/plugin/helpers/validateRscRenderMessage.d.ts +9 -0
  335. package/dist/plugin/helpers/validateRscRenderMessage.d.ts.map +1 -0
  336. package/dist/plugin/helpers/validateRscRenderMessage.js +13 -0
  337. package/dist/plugin/helpers/workerCleanup.d.ts +29 -0
  338. package/dist/plugin/helpers/workerCleanup.d.ts.map +1 -0
  339. package/dist/plugin/helpers/workerCleanup.js +28 -0
  340. package/dist/plugin/helpers/workerManager.d.ts +5 -0
  341. package/dist/plugin/helpers/workerManager.d.ts.map +1 -0
  342. package/dist/plugin/helpers/workerManager.js +18 -0
  343. package/dist/plugin/index.d.ts +4 -1
  344. package/dist/plugin/index.d.ts.map +1 -1
  345. package/dist/plugin/index.js +5 -2
  346. package/dist/plugin/loader/createDefaultLoader.d.ts +1 -1
  347. package/dist/plugin/loader/createDefaultLoader.d.ts.map +1 -1
  348. package/dist/plugin/loader/createDefaultLoader.js +2 -22
  349. package/dist/plugin/loader/createTransformer.d.ts.map +1 -1
  350. package/dist/plugin/loader/createTransformer.js +157 -32
  351. package/dist/plugin/loader/directives/analyzeDirectives.d.ts +3 -2
  352. package/dist/plugin/loader/directives/analyzeDirectives.d.ts.map +1 -1
  353. package/dist/plugin/loader/directives/analyzeDirectives.js +53 -26
  354. package/dist/plugin/loader/directives/analyzeModule.d.ts +2 -6
  355. package/dist/plugin/loader/directives/analyzeModule.d.ts.map +1 -1
  356. package/dist/plugin/loader/directives/analyzeModule.js +32 -11
  357. package/dist/plugin/loader/env-loader.d.ts +3 -2
  358. package/dist/plugin/loader/env-loader.d.ts.map +1 -1
  359. package/dist/plugin/loader/env-loader.js +32 -9
  360. package/dist/plugin/loader/parse.d.ts +3 -2
  361. package/dist/plugin/loader/parse.d.ts.map +1 -1
  362. package/dist/plugin/loader/parse.js +2 -2
  363. package/dist/plugin/loader/react-loader.d.ts +4 -4
  364. package/dist/plugin/loader/react-loader.d.ts.map +1 -1
  365. package/dist/plugin/loader/react-loader.js +101 -73
  366. package/dist/plugin/loader/transformClientModule.d.ts +4 -5
  367. package/dist/plugin/loader/transformClientModule.d.ts.map +1 -1
  368. package/dist/plugin/loader/transformClientModule.js +63 -18
  369. package/dist/plugin/loader/transformModule.d.ts.map +1 -1
  370. package/dist/plugin/loader/transformModule.js +82 -14
  371. package/dist/plugin/loader/transformModuleIfNeeded.d.ts +6 -1
  372. package/dist/plugin/loader/transformModuleIfNeeded.d.ts.map +1 -1
  373. package/dist/plugin/loader/transformModuleIfNeeded.js +10 -18
  374. package/dist/plugin/loader/transformNonServerEnvironment.d.ts +10 -0
  375. package/dist/plugin/loader/transformNonServerEnvironment.d.ts.map +1 -0
  376. package/dist/plugin/loader/transformNonServerEnvironment.js +74 -0
  377. package/dist/plugin/loader/transformServerModule.d.ts +2 -3
  378. package/dist/plugin/loader/transformServerModule.d.ts.map +1 -1
  379. package/dist/plugin/loader/transformServerModule.js +80 -22
  380. package/dist/plugin/loader/transformWithAcornLoose.js +1 -3
  381. package/dist/plugin/loader/types.d.ts +37 -32
  382. package/dist/plugin/loader/types.d.ts.map +1 -1
  383. package/dist/plugin/metrics/collectStreamMetrics.d.ts +1 -2
  384. package/dist/plugin/metrics/collectStreamMetrics.d.ts.map +1 -1
  385. package/dist/plugin/metrics/collectStreamMetrics.js +1 -1
  386. package/dist/plugin/metrics/convertStreamMetrics.d.ts +3 -0
  387. package/dist/plugin/metrics/convertStreamMetrics.d.ts.map +1 -0
  388. package/dist/plugin/metrics/convertStreamMetrics.js +26 -0
  389. package/dist/plugin/metrics/createModuleResolutionMetrics.d.ts +12 -0
  390. package/dist/plugin/metrics/createModuleResolutionMetrics.d.ts.map +1 -0
  391. package/dist/plugin/metrics/createModuleResolutionMetrics.js +32 -0
  392. package/dist/plugin/metrics/createRenderMetrics.d.ts +2 -2
  393. package/dist/plugin/metrics/createRenderMetrics.d.ts.map +1 -1
  394. package/dist/plugin/metrics/createRenderMetrics.js +45 -13
  395. package/dist/plugin/metrics/createStreamMetrics.d.ts +2 -2
  396. package/dist/plugin/metrics/createStreamMetrics.d.ts.map +1 -1
  397. package/dist/plugin/metrics/createStreamMetrics.js +15 -4
  398. package/dist/plugin/metrics/createWorkerStartupMetrics.d.ts +12 -0
  399. package/dist/plugin/metrics/createWorkerStartupMetrics.d.ts.map +1 -0
  400. package/dist/plugin/metrics/createWorkerStartupMetrics.js +14 -0
  401. package/dist/plugin/metrics/formatMetrics.d.ts +0 -6
  402. package/dist/plugin/metrics/formatMetrics.d.ts.map +1 -1
  403. package/dist/plugin/metrics/formatMetrics.js +7 -29
  404. package/dist/plugin/metrics/index.d.ts +6 -3
  405. package/dist/plugin/metrics/index.d.ts.map +1 -1
  406. package/dist/plugin/metrics/index.js +6 -3
  407. package/dist/plugin/metrics/metricWatcher.d.ts +9 -0
  408. package/dist/plugin/metrics/metricWatcher.d.ts.map +1 -0
  409. package/dist/plugin/metrics/metricWatcher.js +141 -0
  410. package/dist/plugin/metrics/types.d.ts +72 -6
  411. package/dist/plugin/metrics/types.d.ts.map +1 -1
  412. package/dist/plugin/orchestrator/createPluginOrchestrator.client.d.ts +3 -0
  413. package/dist/plugin/orchestrator/createPluginOrchestrator.client.d.ts.map +1 -0
  414. package/dist/plugin/orchestrator/createPluginOrchestrator.client.js +36 -0
  415. package/dist/plugin/orchestrator/createPluginOrchestrator.d.ts +19 -0
  416. package/dist/plugin/orchestrator/createPluginOrchestrator.d.ts.map +1 -0
  417. package/dist/plugin/orchestrator/createPluginOrchestrator.js +13 -0
  418. package/dist/plugin/orchestrator/createPluginOrchestrator.server.d.ts +3 -0
  419. package/dist/plugin/orchestrator/createPluginOrchestrator.server.d.ts.map +1 -0
  420. package/dist/plugin/orchestrator/createPluginOrchestrator.server.js +44 -0
  421. package/dist/plugin/orchestrator/index.d.ts +2 -0
  422. package/dist/plugin/orchestrator/index.d.ts.map +1 -0
  423. package/dist/plugin/orchestrator/index.js +1 -0
  424. package/dist/plugin/orchestrator/plugin.js +7 -0
  425. package/dist/plugin/orchestrator/resolveStrategy.d.ts +19 -0
  426. package/dist/plugin/orchestrator/resolveStrategy.d.ts.map +1 -0
  427. package/dist/plugin/orchestrator/resolveStrategy.js +35 -0
  428. package/dist/plugin/orchestrator/types.d.ts +21 -0
  429. package/dist/plugin/orchestrator/types.d.ts.map +1 -0
  430. package/dist/plugin/orchestrator/types.js +1 -0
  431. package/dist/plugin/plugin.client.d.ts +11 -19
  432. package/dist/plugin/plugin.client.d.ts.map +1 -1
  433. package/dist/plugin/plugin.client.js +28 -29
  434. package/dist/plugin/plugin.d.ts +2 -1
  435. package/dist/plugin/plugin.d.ts.map +1 -1
  436. package/dist/plugin/plugin.js +4 -2
  437. package/dist/plugin/plugin.server.d.ts +13 -11
  438. package/dist/plugin/plugin.server.d.ts.map +1 -1
  439. package/dist/plugin/plugin.server.js +19 -22
  440. package/dist/plugin/process-env.d.ts +19 -6
  441. package/dist/plugin/process-env.d.ts.map +1 -1
  442. package/dist/plugin/process-env.js +17 -0
  443. package/dist/plugin/react-client/createMessageHandlers.d.ts +2 -10
  444. package/dist/plugin/react-client/createMessageHandlers.d.ts.map +1 -1
  445. package/dist/plugin/react-client/createMessageHandlers.js +42 -69
  446. package/dist/plugin/react-client/index.client.d.ts +2 -0
  447. package/dist/plugin/react-client/index.client.d.ts.map +1 -0
  448. package/dist/plugin/react-client/index.client.js +1 -0
  449. package/dist/plugin/react-client/index.d.ts +3 -4
  450. package/dist/plugin/react-client/index.d.ts.map +1 -1
  451. package/dist/plugin/react-client/index.js +10 -5
  452. package/dist/plugin/react-client/index.server.d.ts +2 -0
  453. package/dist/plugin/react-client/index.server.d.ts.map +1 -0
  454. package/dist/plugin/react-client/index.server.js +1 -0
  455. package/dist/plugin/react-client/plugin.client.d.ts +15 -0
  456. package/dist/plugin/react-client/plugin.client.d.ts.map +1 -0
  457. package/dist/plugin/react-client/plugin.client.js +98 -0
  458. package/dist/plugin/react-client/plugin.d.ts +2 -5
  459. package/dist/plugin/react-client/plugin.d.ts.map +1 -1
  460. package/dist/plugin/react-client/plugin.js +6 -121
  461. package/dist/plugin/react-client/plugin.server.d.ts +15 -0
  462. package/dist/plugin/react-client/plugin.server.d.ts.map +1 -0
  463. package/dist/plugin/react-client/plugin.server.js +93 -0
  464. package/dist/plugin/react-client/types.d.ts +60 -0
  465. package/dist/plugin/react-client/types.d.ts.map +1 -0
  466. package/dist/plugin/react-client/types.js +1 -0
  467. package/dist/plugin/react-server/index.client.d.ts +2 -0
  468. package/dist/plugin/react-server/index.client.d.ts.map +1 -0
  469. package/dist/plugin/react-server/index.client.js +1 -0
  470. package/dist/plugin/react-server/index.d.ts +3 -1
  471. package/dist/plugin/react-server/index.d.ts.map +1 -1
  472. package/dist/plugin/react-server/index.js +13 -1
  473. package/dist/plugin/react-server/index.server.d.ts +2 -0
  474. package/dist/plugin/react-server/index.server.d.ts.map +1 -0
  475. package/dist/plugin/react-server/index.server.js +1 -0
  476. package/dist/plugin/react-server/plugin.client.d.ts +3 -0
  477. package/dist/plugin/react-server/plugin.client.d.ts.map +1 -0
  478. package/dist/plugin/react-server/plugin.client.js +40 -0
  479. package/dist/plugin/react-server/plugin.d.ts +2 -5
  480. package/dist/plugin/react-server/plugin.d.ts.map +1 -1
  481. package/dist/plugin/react-server/plugin.js +5 -141
  482. package/dist/plugin/react-server/plugin.server.d.ts +3 -0
  483. package/dist/plugin/react-server/plugin.server.d.ts.map +1 -0
  484. package/dist/plugin/react-server/plugin.server.js +18 -0
  485. package/dist/plugin/react-server/types.d.ts +11 -0
  486. package/dist/plugin/react-server/types.d.ts.map +1 -0
  487. package/dist/plugin/react-server/types.js +1 -0
  488. package/dist/plugin/react-static/collectHtmlContent.d.ts +15 -0
  489. package/dist/plugin/react-static/collectHtmlContent.d.ts.map +1 -0
  490. package/dist/plugin/react-static/collectHtmlContent.js +104 -0
  491. package/dist/plugin/react-static/collectRscContent.d.ts +10 -15
  492. package/dist/plugin/react-static/collectRscContent.d.ts.map +1 -1
  493. package/dist/plugin/react-static/collectRscContent.js +71 -20
  494. package/dist/plugin/react-static/configurePreviewServer.d.ts +1 -7
  495. package/dist/plugin/react-static/configurePreviewServer.d.ts.map +1 -1
  496. package/dist/plugin/react-static/configurePreviewServer.js +15 -29
  497. package/dist/plugin/react-static/createBuildLoader.client.d.ts +2 -0
  498. package/dist/plugin/react-static/createBuildLoader.client.d.ts.map +1 -0
  499. package/dist/plugin/react-static/createBuildLoader.client.js +7 -0
  500. package/dist/plugin/react-static/createBuildLoader.d.ts +3 -19
  501. package/dist/plugin/react-static/createBuildLoader.d.ts.map +1 -1
  502. package/dist/plugin/react-static/createBuildLoader.js +4 -226
  503. package/dist/plugin/react-static/createBuildLoader.server.d.ts +9 -0
  504. package/dist/plugin/react-static/createBuildLoader.server.d.ts.map +1 -0
  505. package/dist/plugin/react-static/createBuildLoader.server.js +253 -0
  506. package/dist/plugin/react-static/fileWriter.d.ts +3 -14
  507. package/dist/plugin/react-static/fileWriter.d.ts.map +1 -1
  508. package/dist/plugin/react-static/fileWriter.js +233 -42
  509. package/dist/plugin/react-static/index.client.d.ts +7 -0
  510. package/dist/plugin/react-static/index.client.d.ts.map +1 -0
  511. package/dist/plugin/react-static/index.client.js +6 -0
  512. package/dist/plugin/react-static/index.d.ts +7 -1
  513. package/dist/plugin/react-static/index.d.ts.map +1 -1
  514. package/dist/plugin/react-static/index.js +19 -1
  515. package/dist/plugin/react-static/index.server.d.ts +7 -0
  516. package/dist/plugin/react-static/index.server.d.ts.map +1 -0
  517. package/dist/plugin/react-static/index.server.js +6 -0
  518. package/dist/plugin/react-static/plugin.client.d.ts +32 -0
  519. package/dist/plugin/react-static/plugin.client.d.ts.map +1 -0
  520. package/dist/plugin/react-static/plugin.client.js +801 -0
  521. package/dist/plugin/react-static/plugin.d.ts +3 -20
  522. package/dist/plugin/react-static/plugin.d.ts.map +1 -1
  523. package/dist/plugin/react-static/plugin.js +4 -365
  524. package/dist/plugin/react-static/plugin.server.d.ts +18 -0
  525. package/dist/plugin/react-static/plugin.server.d.ts.map +1 -0
  526. package/dist/plugin/react-static/plugin.server.js +615 -0
  527. package/dist/plugin/react-static/processCssFilesForPages.d.ts +16 -0
  528. package/dist/plugin/react-static/processCssFilesForPages.d.ts.map +1 -0
  529. package/dist/plugin/react-static/processCssFilesForPages.js +94 -0
  530. package/dist/plugin/react-static/renderPage.client.d.ts +49 -0
  531. package/dist/plugin/react-static/renderPage.client.d.ts.map +1 -0
  532. package/dist/plugin/react-static/renderPage.client.js +555 -0
  533. package/dist/plugin/react-static/renderPage.d.ts +3 -4
  534. package/dist/plugin/react-static/renderPage.d.ts.map +1 -1
  535. package/dist/plugin/react-static/renderPage.js +6 -131
  536. package/dist/plugin/react-static/renderPage.server.d.ts +24 -0
  537. package/dist/plugin/react-static/renderPage.server.d.ts.map +1 -0
  538. package/dist/plugin/react-static/renderPage.server.js +533 -0
  539. package/dist/plugin/react-static/renderPages.d.ts +11 -3
  540. package/dist/plugin/react-static/renderPages.d.ts.map +1 -1
  541. package/dist/plugin/react-static/renderPages.js +533 -92
  542. package/dist/plugin/react-static/renderPagesBatched.d.ts +6 -0
  543. package/dist/plugin/react-static/renderPagesBatched.d.ts.map +1 -0
  544. package/dist/plugin/react-static/renderPagesBatched.js +195 -0
  545. package/dist/plugin/react-static/renderStreams.d.ts +2 -5
  546. package/dist/plugin/react-static/renderStreams.d.ts.map +1 -1
  547. package/dist/plugin/react-static/renderStreams.js +36 -24
  548. package/dist/plugin/react-static/rscToHtmlStream.client.d.ts +12 -0
  549. package/dist/plugin/react-static/rscToHtmlStream.client.d.ts.map +1 -0
  550. package/dist/plugin/react-static/rscToHtmlStream.client.js +32 -0
  551. package/dist/plugin/react-static/rscToHtmlStream.d.ts +3 -21
  552. package/dist/plugin/react-static/rscToHtmlStream.d.ts.map +1 -1
  553. package/dist/plugin/react-static/rscToHtmlStream.js +4 -53
  554. package/dist/plugin/react-static/rscToHtmlStream.server.d.ts +3 -0
  555. package/dist/plugin/react-static/rscToHtmlStream.server.d.ts.map +1 -0
  556. package/dist/plugin/react-static/rscToHtmlStream.server.js +39 -0
  557. package/dist/plugin/react-static/temporaryReferences.client.d.ts +2 -0
  558. package/dist/plugin/react-static/temporaryReferences.client.d.ts.map +1 -0
  559. package/dist/plugin/react-static/temporaryReferences.client.js +1 -0
  560. package/dist/plugin/react-static/temporaryReferences.d.ts +2 -1
  561. package/dist/plugin/react-static/temporaryReferences.d.ts.map +1 -1
  562. package/dist/plugin/react-static/temporaryReferences.js +6 -10
  563. package/dist/plugin/react-static/temporaryReferences.server.d.ts +2 -0
  564. package/dist/plugin/react-static/temporaryReferences.server.d.ts.map +1 -0
  565. package/dist/plugin/react-static/temporaryReferences.server.js +3 -0
  566. package/dist/plugin/react-static/types.d.ts +83 -9
  567. package/dist/plugin/react-static/types.d.ts.map +1 -1
  568. package/dist/plugin/root.d.ts.map +1 -1
  569. package/dist/plugin/root.js +2 -5
  570. package/dist/plugin/stream/MessagePortReadable.d.ts +22 -0
  571. package/dist/plugin/stream/MessagePortReadable.d.ts.map +1 -0
  572. package/dist/plugin/stream/MessagePortReadable.js +101 -0
  573. package/dist/plugin/stream/MessagePortWritable.d.ts +22 -0
  574. package/dist/plugin/stream/MessagePortWritable.d.ts.map +1 -0
  575. package/dist/plugin/stream/MessagePortWritable.js +85 -0
  576. package/dist/plugin/stream/client.js +12 -0
  577. package/dist/plugin/stream/createFromNodeStream.client.d.ts +9 -0
  578. package/dist/plugin/stream/createFromNodeStream.client.d.ts.map +1 -0
  579. package/dist/plugin/stream/createFromNodeStream.client.js +76 -0
  580. package/dist/plugin/stream/createFromNodeStream.d.ts +3 -0
  581. package/dist/plugin/stream/createFromNodeStream.d.ts.map +1 -0
  582. package/dist/plugin/stream/createFromNodeStream.js +6 -0
  583. package/dist/plugin/stream/createFromNodeStream.server.d.ts +9 -0
  584. package/dist/plugin/stream/createFromNodeStream.server.d.ts.map +1 -0
  585. package/dist/plugin/stream/createFromNodeStream.server.js +27 -0
  586. package/dist/plugin/stream/createFromNodeStream.types.d.ts +37 -0
  587. package/dist/plugin/stream/createFromNodeStream.types.d.ts.map +1 -0
  588. package/dist/plugin/stream/createFromNodeStream.types.js +1 -0
  589. package/dist/plugin/stream/createHtmlStream.client.d.ts +3 -0
  590. package/dist/plugin/stream/createHtmlStream.client.d.ts.map +1 -0
  591. package/dist/plugin/stream/createHtmlStream.client.js +42 -0
  592. package/dist/plugin/stream/createHtmlStream.d.ts +3 -0
  593. package/dist/plugin/stream/createHtmlStream.d.ts.map +1 -0
  594. package/dist/plugin/stream/createHtmlStream.js +6 -0
  595. package/dist/plugin/stream/createHtmlStream.server.d.ts +6 -0
  596. package/dist/plugin/stream/createHtmlStream.server.d.ts.map +1 -0
  597. package/dist/plugin/stream/createHtmlStream.server.js +224 -0
  598. package/dist/plugin/stream/createHtmlStream.types.d.ts +43 -0
  599. package/dist/plugin/stream/createHtmlStream.types.d.ts.map +1 -0
  600. package/dist/plugin/stream/createHtmlStream.types.js +1 -0
  601. package/dist/plugin/stream/createMainThreadHandlers.d.ts +11 -0
  602. package/dist/plugin/stream/createMainThreadHandlers.d.ts.map +1 -0
  603. package/dist/plugin/stream/createMainThreadHandlers.js +32 -0
  604. package/dist/plugin/stream/createMessageChannels.d.ts +29 -0
  605. package/dist/plugin/stream/createMessageChannels.d.ts.map +1 -0
  606. package/dist/plugin/stream/createMessageChannels.js +35 -0
  607. package/dist/plugin/stream/createRenderToPipeableStreamHandler.client.d.ts +10 -0
  608. package/dist/plugin/stream/createRenderToPipeableStreamHandler.client.d.ts.map +1 -0
  609. package/dist/plugin/stream/createRenderToPipeableStreamHandler.client.js +188 -0
  610. package/dist/plugin/stream/createRenderToPipeableStreamHandler.d.ts +3 -0
  611. package/dist/plugin/stream/createRenderToPipeableStreamHandler.d.ts.map +1 -0
  612. package/dist/plugin/stream/createRenderToPipeableStreamHandler.js +6 -0
  613. package/dist/plugin/stream/createRenderToPipeableStreamHandler.server.d.ts +45 -0
  614. package/dist/plugin/stream/createRenderToPipeableStreamHandler.server.d.ts.map +1 -0
  615. package/dist/plugin/stream/createRenderToPipeableStreamHandler.server.js +249 -0
  616. package/dist/plugin/stream/createRenderToPipeableStreamHandler.types.d.ts +17 -0
  617. package/dist/plugin/stream/createRenderToPipeableStreamHandler.types.d.ts.map +1 -0
  618. package/dist/plugin/stream/createRenderToPipeableStreamHandler.types.js +1 -0
  619. package/dist/plugin/stream/createRscStream.client.d.ts +18 -0
  620. package/dist/plugin/stream/createRscStream.client.d.ts.map +1 -0
  621. package/dist/plugin/stream/createRscStream.client.js +79 -0
  622. package/dist/plugin/stream/createRscStream.d.ts +2 -0
  623. package/dist/plugin/stream/createRscStream.d.ts.map +1 -0
  624. package/dist/plugin/stream/createRscStream.js +13 -0
  625. package/dist/plugin/stream/createRscStream.server.d.ts +46 -0
  626. package/dist/plugin/stream/createRscStream.server.d.ts.map +1 -0
  627. package/dist/plugin/stream/createRscStream.server.js +113 -0
  628. package/dist/plugin/stream/createRscStream.types.d.ts +134 -0
  629. package/dist/plugin/stream/createRscStream.types.d.ts.map +1 -0
  630. package/dist/plugin/stream/createRscStream.types.js +1 -0
  631. package/dist/plugin/stream/createRscStream.utils.d.ts +54 -0
  632. package/dist/plugin/stream/createRscStream.utils.d.ts.map +1 -0
  633. package/dist/plugin/stream/createRscStream.utils.js +91 -0
  634. package/dist/plugin/stream/createRscWorkerStream.d.ts +41 -0
  635. package/dist/plugin/stream/createRscWorkerStream.d.ts.map +1 -0
  636. package/dist/plugin/stream/createRscWorkerStream.js +120 -0
  637. package/dist/plugin/stream/handleRscStream.client.d.ts +17 -0
  638. package/dist/plugin/stream/handleRscStream.client.d.ts.map +1 -0
  639. package/dist/plugin/stream/handleRscStream.client.js +163 -0
  640. package/dist/plugin/stream/handleRscStream.d.ts +3 -0
  641. package/dist/plugin/stream/handleRscStream.d.ts.map +1 -0
  642. package/dist/plugin/stream/handleRscStream.js +13 -0
  643. package/dist/plugin/stream/handleRscStream.server.d.ts +6 -0
  644. package/dist/plugin/stream/handleRscStream.server.d.ts.map +1 -0
  645. package/dist/plugin/stream/handleRscStream.server.js +70 -0
  646. package/dist/plugin/stream/handleRscStream.types.d.ts +28 -0
  647. package/dist/plugin/stream/handleRscStream.types.d.ts.map +1 -0
  648. package/dist/plugin/stream/handleRscStream.types.js +1 -0
  649. package/dist/plugin/stream/index.client.d.ts +7 -0
  650. package/dist/plugin/stream/index.client.d.ts.map +1 -0
  651. package/dist/plugin/stream/index.client.js +11 -0
  652. package/dist/plugin/stream/index.d.ts +95 -0
  653. package/dist/plugin/stream/index.d.ts.map +1 -0
  654. package/dist/plugin/stream/index.js +21 -0
  655. package/dist/plugin/stream/index.server.d.ts +7 -0
  656. package/dist/plugin/stream/index.server.d.ts.map +1 -0
  657. package/dist/plugin/stream/index.server.js +11 -0
  658. package/dist/plugin/stream/renderRscStream.server.d.ts +21 -0
  659. package/dist/plugin/stream/renderRscStream.server.d.ts.map +1 -0
  660. package/dist/plugin/stream/renderRscStream.server.js +153 -0
  661. package/dist/plugin/stream/renderRscStream.types.d.ts +36 -0
  662. package/dist/plugin/stream/renderRscStream.types.d.ts.map +1 -0
  663. package/dist/plugin/stream/renderRscStream.types.js +1 -0
  664. package/dist/plugin/stream/renderRscStreamHelpers.server.d.ts +9 -0
  665. package/dist/plugin/stream/renderRscStreamHelpers.server.d.ts.map +1 -0
  666. package/dist/plugin/stream/renderRscStreamHelpers.server.js +63 -0
  667. package/dist/plugin/stream/server.js +12 -0
  668. package/dist/plugin/stream/setMaxListeners.d.ts +16 -0
  669. package/dist/plugin/stream/setMaxListeners.d.ts.map +1 -0
  670. package/dist/plugin/stream/setMaxListeners.js +16 -0
  671. package/dist/plugin/transformer/createTransformerPlugin.d.ts +18 -0
  672. package/dist/plugin/transformer/createTransformerPlugin.d.ts.map +1 -0
  673. package/dist/plugin/transformer/createTransformerPlugin.js +269 -0
  674. package/dist/plugin/transformer/plugin.client.d.ts +3 -0
  675. package/dist/plugin/transformer/plugin.client.d.ts.map +1 -0
  676. package/dist/plugin/transformer/plugin.client.js +5 -0
  677. package/dist/plugin/transformer/plugin.server.d.ts +2 -29
  678. package/dist/plugin/transformer/plugin.server.d.ts.map +1 -1
  679. package/dist/plugin/transformer/plugin.server.js +5 -104
  680. package/dist/plugin/transformer/transformerEnv.d.ts +15 -0
  681. package/dist/plugin/transformer/transformerEnv.d.ts.map +1 -0
  682. package/dist/plugin/transformer/transformerEnv.js +26 -0
  683. package/dist/plugin/types.d.ts +368 -143
  684. package/dist/plugin/types.d.ts.map +1 -1
  685. package/dist/plugin/types.js +1 -2
  686. package/dist/plugin/utils/callServer.d.ts +1 -1
  687. package/dist/plugin/utils/callServer.d.ts.map +1 -1
  688. package/dist/plugin/utils/createCallServer.d.ts +1 -1
  689. package/dist/plugin/utils/createCallServer.d.ts.map +1 -1
  690. package/dist/plugin/utils/createCallServer.js +4 -9
  691. package/dist/plugin/utils/createReactFetcher.d.ts +43 -2
  692. package/dist/plugin/utils/createReactFetcher.d.ts.map +1 -1
  693. package/dist/plugin/utils/createReactFetcher.js +14 -3
  694. package/dist/plugin/utils/envUrls.node.d.ts.map +1 -1
  695. package/dist/plugin/utils/envUrls.node.js +11 -11
  696. package/dist/plugin/utils/index.client.d.ts +8 -0
  697. package/dist/plugin/utils/index.client.d.ts.map +1 -0
  698. package/dist/plugin/utils/index.client.js +8 -0
  699. package/dist/plugin/utils/index.d.ts +1 -0
  700. package/dist/plugin/utils/index.d.ts.map +1 -1
  701. package/dist/plugin/utils/index.js +3 -2
  702. package/dist/plugin/utils/index.server.d.ts +6 -0
  703. package/dist/plugin/utils/index.server.d.ts.map +1 -0
  704. package/dist/plugin/utils/index.server.js +8 -0
  705. package/dist/plugin/utils/routeToURL.d.ts.map +1 -1
  706. package/dist/plugin/utils/routeToURL.js +4 -4
  707. package/dist/plugin/utils/urls.d.ts +1 -1
  708. package/dist/plugin/utils/urls.d.ts.map +1 -1
  709. package/dist/plugin/utils/urls.js +29 -8
  710. package/dist/plugin/utils/useRscHmr.d.ts +39 -0
  711. package/dist/plugin/utils/useRscHmr.d.ts.map +1 -0
  712. package/dist/plugin/utils/useRscHmr.js +27 -0
  713. package/dist/plugin/vendor/vendor.client.d.ts +3 -3
  714. package/dist/plugin/vendor/vendor.client.d.ts.map +1 -1
  715. package/dist/plugin/vendor/vendor.client.js +7 -6
  716. package/dist/plugin/vendor/vendor.d.ts +1 -1
  717. package/dist/plugin/vendor/vendor.d.ts.map +1 -1
  718. package/dist/plugin/vendor/vendor.js +4 -6
  719. package/dist/plugin/vendor/vendor.server.d.ts +4 -2
  720. package/dist/plugin/vendor/vendor.server.d.ts.map +1 -1
  721. package/dist/plugin/vendor/vendor.server.js +2 -3
  722. package/dist/plugin/vendor/vendor.static.d.ts +4 -0
  723. package/dist/plugin/vendor/vendor.static.d.ts.map +1 -0
  724. package/dist/plugin/vendor/vendor.static.js +15 -0
  725. package/dist/plugin/worker/createWorker.d.ts +16 -5
  726. package/dist/plugin/worker/createWorker.d.ts.map +1 -1
  727. package/dist/plugin/worker/createWorker.js +207 -30
  728. package/dist/plugin/worker/html/handleHtmlRender.d.ts +14 -0
  729. package/dist/plugin/worker/html/handleHtmlRender.d.ts.map +1 -0
  730. package/dist/plugin/worker/html/handleHtmlRender.js +190 -0
  731. package/dist/plugin/worker/html/html-worker.development.js +9 -26
  732. package/dist/plugin/worker/html/html-worker.js +4 -4
  733. package/dist/plugin/worker/html/html-worker.production.js +7 -13
  734. package/dist/plugin/worker/html/index.d.ts +1 -1
  735. package/dist/plugin/worker/html/index.js +6 -2
  736. package/dist/plugin/worker/html/messageHandler.d.ts +1 -1
  737. package/dist/plugin/worker/html/messageHandler.d.ts.map +1 -1
  738. package/dist/plugin/worker/html/messageHandler.js +291 -104
  739. package/dist/plugin/worker/html/state.d.ts +10 -0
  740. package/dist/plugin/worker/html/state.d.ts.map +1 -0
  741. package/dist/plugin/worker/html/state.js +28 -0
  742. package/dist/plugin/worker/html/types.d.ts +52 -23
  743. package/dist/plugin/worker/html/types.d.ts.map +1 -1
  744. package/dist/plugin/worker/index.js +1 -1
  745. package/dist/plugin/worker/rsc/createBundleLoader.d.ts +22 -0
  746. package/dist/plugin/worker/rsc/createBundleLoader.d.ts.map +1 -0
  747. package/dist/plugin/worker/rsc/createBundleLoader.js +55 -0
  748. package/dist/plugin/worker/rsc/createRscWorkerLoader.d.ts +23 -0
  749. package/dist/plugin/worker/rsc/createRscWorkerLoader.d.ts.map +1 -0
  750. package/dist/plugin/worker/rsc/createRscWorkerLoader.js +79 -0
  751. package/dist/plugin/worker/rsc/handleRscRender.d.ts +32 -0
  752. package/dist/plugin/worker/rsc/handleRscRender.d.ts.map +1 -0
  753. package/dist/plugin/worker/rsc/handleRscRender.js +349 -0
  754. package/dist/plugin/worker/rsc/handlers.d.ts +8 -2
  755. package/dist/plugin/worker/rsc/handlers.d.ts.map +1 -1
  756. package/dist/plugin/worker/rsc/handlers.js +137 -200
  757. package/dist/plugin/worker/rsc/hydrateRscRenderMessage.d.ts +118 -0
  758. package/dist/plugin/worker/rsc/hydrateRscRenderMessage.d.ts.map +1 -0
  759. package/dist/plugin/worker/rsc/hydrateRscRenderMessage.js +61 -0
  760. package/dist/plugin/worker/rsc/messageHandler.d.ts +1 -1
  761. package/dist/plugin/worker/rsc/messageHandler.d.ts.map +1 -1
  762. package/dist/plugin/worker/rsc/messageHandler.js +927 -47
  763. package/dist/plugin/worker/rsc/rsc-worker.development.js +153 -148
  764. package/dist/plugin/worker/rsc/rsc-worker.js +2 -3
  765. package/dist/plugin/worker/rsc/rsc-worker.production.js +240 -15
  766. package/dist/plugin/worker/rsc/state.d.ts +6 -0
  767. package/dist/plugin/worker/rsc/state.d.ts.map +1 -1
  768. package/dist/plugin/worker/rsc/state.js +37 -5
  769. package/dist/plugin/worker/rsc/types.d.ts +73 -12
  770. package/dist/plugin/worker/rsc/types.d.ts.map +1 -1
  771. package/dist/plugin/worker/rsc/workerUserOptions.d.ts +10 -0
  772. package/dist/plugin/worker/rsc/workerUserOptions.d.ts.map +1 -0
  773. package/dist/plugin/worker/rsc/workerUserOptions.js +39 -0
  774. package/dist/plugin/worker/sendMessage.d.ts +2 -3
  775. package/dist/plugin/worker/sendMessage.d.ts.map +1 -1
  776. package/dist/plugin/worker/sendMessage.js +24 -38
  777. package/dist/plugin/worker/types.d.ts +42 -56
  778. package/dist/plugin/worker/types.d.ts.map +1 -1
  779. package/dist/plugin/worker/worker-handlers.server.d.ts +2 -0
  780. package/dist/plugin/worker/worker-handlers.server.d.ts.map +1 -0
  781. package/dist/plugin/worker/worker-handlers.server.js +1 -0
  782. package/dist/server.d.ts +5 -1
  783. package/dist/server.d.ts.map +1 -1
  784. package/dist/server.js +4 -6
  785. package/dist/static.js +11 -0
  786. package/dist/tsconfig.tsbuildinfo +1 -1
  787. package/package.json +102 -27
  788. package/plugin/bundle/bundles.ts +22 -0
  789. package/plugin/bundle/deferredStaticGeneration.ts +48 -0
  790. package/plugin/bundle/manifests.ts +73 -0
  791. package/plugin/components/css.tsx +3 -7
  792. package/plugin/components/html.tsx +4 -3
  793. package/plugin/components/index.ts +1 -1
  794. package/plugin/components/root.tsx +3 -3
  795. package/plugin/config/autoDiscover/createGlobAutoDiscover.ts +10 -5
  796. package/plugin/config/autoDiscover/pageAndPropFiles.ts +4 -2
  797. package/plugin/config/autoDiscover/resolveAutoDiscover.ts +64 -79
  798. package/plugin/config/autoDiscover/resolveBuildPages.ts +181 -69
  799. package/plugin/config/createHandlerOptions.client.ts +403 -0
  800. package/plugin/config/createHandlerOptions.server.ts +477 -0
  801. package/plugin/config/createHandlerOptions.ts +46 -0
  802. package/plugin/config/createHandlerOptions.types.ts +119 -0
  803. package/plugin/config/createModuleID.ts +201 -10
  804. package/plugin/config/defaults.tsx +108 -55
  805. package/plugin/config/envPrefixFromConfig.ts +10 -0
  806. package/plugin/config/getCondition.ts +267 -10
  807. package/plugin/{getNodeEnv.ts → config/getNodeEnv.ts} +4 -2
  808. package/plugin/config/index.ts +60 -1
  809. package/plugin/config/resolveDirectiveMatcher.ts +13 -34
  810. package/plugin/config/resolveEnv.ts +37 -33
  811. package/plugin/config/resolveOptions.ts +375 -154
  812. package/plugin/config/resolvePages.ts +1 -1
  813. package/plugin/config/resolvePatternWithValues.ts +6 -26
  814. package/plugin/config/resolveUrlOption.ts +2 -2
  815. package/plugin/config/resolveUserConfig.ts +359 -124
  816. package/plugin/config/stashedOptionsState.ts +144 -0
  817. package/plugin/dev-server/cleanupServerAction.client.ts +47 -0
  818. package/plugin/dev-server/cleanupServerAction.server.ts +24 -0
  819. package/plugin/dev-server/cleanupServerAction.ts +8 -0
  820. package/plugin/dev-server/configureReactServer.client.ts +107 -0
  821. package/plugin/dev-server/configureReactServer.server.ts +558 -0
  822. package/plugin/dev-server/configureReactServer.ts +8 -0
  823. package/plugin/dev-server/configureRequestHandler.client.ts +382 -0
  824. package/plugin/dev-server/configureRequestHandler.server.ts +46 -0
  825. package/plugin/dev-server/configureRequestHandler.ts +8 -0
  826. package/plugin/dev-server/handleServerAction.client.ts +126 -0
  827. package/plugin/dev-server/handleServerAction.server.ts +10 -0
  828. package/plugin/dev-server/handleServerAction.ts +8 -0
  829. package/plugin/dev-server/index.client.ts +6 -0
  830. package/plugin/dev-server/index.server.ts +6 -0
  831. package/plugin/dev-server/index.ts +20 -0
  832. package/plugin/dev-server/plugin.client.ts +160 -0
  833. package/plugin/dev-server/plugin.server.ts +133 -0
  834. package/plugin/dev-server/restartWorker.client.ts +155 -0
  835. package/plugin/dev-server/restartWorker.server.ts +108 -0
  836. package/plugin/dev-server/restartWorker.ts +8 -0
  837. package/plugin/dev-server/types.ts +78 -0
  838. package/plugin/dev-server/virtualRscHmrPlugin.ts +82 -0
  839. package/plugin/env/createConfigEnv.ts +59 -0
  840. package/plugin/env/createEnvPlugin.ts +76 -0
  841. package/plugin/env/getArgValue.ts +56 -0
  842. package/plugin/env/getEnvKey.ts +80 -0
  843. package/plugin/env/index.ts +14 -1
  844. package/plugin/env/plugin.client.ts +3 -0
  845. package/plugin/env/plugin.server.ts +4 -0
  846. package/plugin/env/plugin.ts +40 -164
  847. package/plugin/env/userConfigEnv.ts +22 -0
  848. package/plugin/environments/createBuildEventPlugin.ts +117 -0
  849. package/plugin/environments/createEnvironmentPlugin.ts +332 -0
  850. package/plugin/environments/hashCoordination.ts +39 -0
  851. package/plugin/environments/resolveEnvironmentConfig.ts +320 -0
  852. package/plugin/error/assertPanic.ts +9 -0
  853. package/plugin/error/handleError.ts +63 -0
  854. package/plugin/error/index.ts +4 -1
  855. package/plugin/error/logError.ts +64 -40
  856. package/plugin/error/panicThresholdHandler.ts +52 -0
  857. package/plugin/error/serializeError.ts +36 -11
  858. package/plugin/error/serializeErrorInfo.ts +17 -0
  859. package/plugin/error/setupGlobalErrorHandler.ts +71 -0
  860. package/plugin/error/shouldPanic.ts +14 -0
  861. package/plugin/error/toError.ts +59 -19
  862. package/plugin/error/types.ts +32 -0
  863. package/plugin/helpers/README.md +112 -0
  864. package/plugin/helpers/collectManifestCss.ts +24 -5
  865. package/plugin/helpers/collectViteModuleGraphCss.ts +83 -9
  866. package/plugin/helpers/createBufferedRscStream.ts +194 -0
  867. package/plugin/helpers/createCssProps.tsx +22 -41
  868. package/plugin/helpers/createElementWithReact.tsx +121 -0
  869. package/plugin/helpers/createPatternMatcher.ts +100 -0
  870. package/plugin/helpers/createRscRenderHelpers.ts +77 -0
  871. package/plugin/helpers/createSafePageComponent.ts +64 -0
  872. package/plugin/helpers/createSerializableHandlerOptions.ts +183 -0
  873. package/plugin/helpers/createSharedLoader.ts +207 -0
  874. package/plugin/helpers/createUnifiedCssProcessor.ts +175 -0
  875. package/plugin/helpers/getBundleManifest.ts +2 -3
  876. package/plugin/helpers/getRouteFiles.ts +94 -48
  877. package/plugin/helpers/handleServerAction.client.ts +145 -0
  878. package/plugin/helpers/handleServerAction.server.ts +151 -0
  879. package/plugin/helpers/handleServerAction.ts +19 -78
  880. package/plugin/helpers/handleServerActionHelper.ts +270 -0
  881. package/plugin/helpers/headlessStreamReuseHandler.ts +48 -0
  882. package/plugin/helpers/headlessStreamState.ts +122 -0
  883. package/plugin/helpers/hydrateUserOptions.ts +2 -2
  884. package/plugin/helpers/index.ts +32 -5
  885. package/plugin/helpers/logRenderStart.ts +26 -0
  886. package/plugin/helpers/mergeMessageWithDefaults.ts +80 -0
  887. package/plugin/helpers/pipeToResponse.ts +77 -0
  888. package/plugin/helpers/requestInfo.ts +59 -39
  889. package/plugin/helpers/resolveComponents.client.ts +183 -0
  890. package/plugin/helpers/resolveModuleFromManifest.ts +99 -0
  891. package/plugin/helpers/resolvePageAndProps.ts +237 -50
  892. package/plugin/helpers/resolveRenderUrl.ts +26 -0
  893. package/plugin/helpers/resolveStreamElements.client.ts +50 -0
  894. package/plugin/helpers/resolveStreamElements.server.ts +43 -0
  895. package/plugin/helpers/resolveStreamElements.ts +13 -0
  896. package/plugin/helpers/resolveStreamElements.types.ts +29 -0
  897. package/plugin/helpers/resolveVirtualAndNodeModules.ts +75 -0
  898. package/plugin/helpers/resolveWithDefaultRootAndHtml.ts +25 -0
  899. package/plugin/helpers/serializeUserOptions.ts +37 -15
  900. package/plugin/helpers/tryManifest.ts +15 -6
  901. package/plugin/helpers/validateRscRenderMessage.ts +13 -0
  902. package/plugin/helpers/workerCleanup.ts +85 -0
  903. package/plugin/helpers/workerManager.ts +16 -0
  904. package/plugin/index.ts +6 -2
  905. package/plugin/loader/createDefaultLoader.ts +0 -21
  906. package/plugin/loader/createTransformer.ts +232 -46
  907. package/plugin/loader/directives/analyzeDirectives.ts +163 -73
  908. package/plugin/loader/directives/analyzeModule.ts +46 -19
  909. package/plugin/loader/env-loader.ts +56 -14
  910. package/plugin/loader/parse.ts +2 -2
  911. package/plugin/loader/react-loader.ts +133 -85
  912. package/plugin/loader/transformClientModule.ts +84 -26
  913. package/plugin/loader/transformModule.ts +103 -18
  914. package/plugin/loader/transformModuleIfNeeded.ts +20 -23
  915. package/plugin/loader/transformNonServerEnvironment.ts +103 -0
  916. package/plugin/loader/transformServerModule.ts +132 -37
  917. package/plugin/loader/types.ts +31 -23
  918. package/plugin/metrics/collectStreamMetrics.ts +1 -2
  919. package/plugin/metrics/convertStreamMetrics.ts +28 -0
  920. package/plugin/metrics/createModuleResolutionMetrics.ts +38 -0
  921. package/plugin/metrics/createRenderMetrics.ts +46 -13
  922. package/plugin/metrics/createStreamMetrics.ts +16 -6
  923. package/plugin/metrics/createWorkerStartupMetrics.ts +38 -0
  924. package/plugin/metrics/formatMetrics.ts +5 -33
  925. package/plugin/metrics/index.ts +6 -3
  926. package/plugin/metrics/metricWatcher.ts +216 -0
  927. package/plugin/metrics/types.ts +87 -8
  928. package/plugin/orchestrator/createPluginOrchestrator.client.ts +47 -0
  929. package/plugin/orchestrator/createPluginOrchestrator.server.ts +55 -0
  930. package/plugin/orchestrator/createPluginOrchestrator.ts +29 -0
  931. package/plugin/orchestrator/index.ts +1 -0
  932. package/plugin/orchestrator/resolveStrategy.ts +53 -0
  933. package/plugin/orchestrator/types.ts +24 -0
  934. package/plugin/plugin.client.ts +30 -32
  935. package/plugin/plugin.server.ts +38 -45
  936. package/plugin/plugin.ts +8 -2
  937. package/plugin/process-env.ts +30 -6
  938. package/plugin/react-client/createMessageHandlers.ts +9 -34
  939. package/plugin/react-client/index.client.ts +1 -0
  940. package/plugin/react-client/index.server.ts +1 -0
  941. package/plugin/react-client/index.ts +13 -4
  942. package/plugin/react-client/plugin.client.ts +124 -0
  943. package/plugin/react-client/plugin.server.ts +108 -0
  944. package/plugin/react-client/plugin.ts +13 -152
  945. package/plugin/react-client/types.ts +95 -0
  946. package/plugin/react-server/index.client.ts +1 -0
  947. package/plugin/react-server/index.server.ts +1 -0
  948. package/plugin/react-server/index.ts +13 -1
  949. package/plugin/react-server/plugin.client.ts +54 -0
  950. package/plugin/react-server/plugin.server.ts +27 -0
  951. package/plugin/react-server/plugin.ts +8 -183
  952. package/plugin/react-server/types.ts +24 -0
  953. package/plugin/react-static/collectHtmlContent.ts +131 -0
  954. package/plugin/react-static/collectRscContent.ts +92 -49
  955. package/plugin/react-static/configurePreviewServer.ts +20 -41
  956. package/plugin/react-static/createBuildLoader.client.ts +7 -0
  957. package/plugin/react-static/createBuildLoader.server.ts +333 -0
  958. package/plugin/react-static/createBuildLoader.ts +8 -300
  959. package/plugin/react-static/fileWriter.ts +303 -64
  960. package/plugin/react-static/index.client.ts +6 -0
  961. package/plugin/react-static/index.server.ts +6 -0
  962. package/plugin/react-static/index.ts +25 -1
  963. package/plugin/react-static/plugin.client.ts +932 -0
  964. package/plugin/react-static/plugin.server.ts +713 -0
  965. package/plugin/react-static/plugin.ts +8 -446
  966. package/plugin/react-static/processCssFilesForPages.ts +148 -0
  967. package/plugin/react-static/renderPage.client.ts +640 -0
  968. package/plugin/react-static/renderPage.server.ts +655 -0
  969. package/plugin/react-static/renderPage.ts +10 -172
  970. package/plugin/react-static/renderPages.ts +736 -139
  971. package/plugin/react-static/renderPagesBatched.ts +264 -0
  972. package/plugin/react-static/renderStreams.ts +12 -16
  973. package/plugin/react-static/rscToHtmlStream.client.ts +61 -0
  974. package/plugin/react-static/rscToHtmlStream.server.ts +66 -0
  975. package/plugin/react-static/rscToHtmlStream.ts +8 -80
  976. package/plugin/react-static/temporaryReferences.client.ts +1 -0
  977. package/plugin/react-static/temporaryReferences.server.ts +5 -0
  978. package/plugin/react-static/temporaryReferences.ts +11 -2
  979. package/plugin/react-static/types.ts +202 -8
  980. package/plugin/root.ts +1 -3
  981. package/plugin/stream/MessagePortReadable.ts +131 -0
  982. package/plugin/stream/MessagePortWritable.ts +104 -0
  983. package/plugin/stream/createFromNodeStream.client.ts +90 -0
  984. package/plugin/stream/createFromNodeStream.server.ts +30 -0
  985. package/plugin/stream/createFromNodeStream.ts +13 -0
  986. package/plugin/stream/createFromNodeStream.types.ts +53 -0
  987. package/plugin/stream/createHtmlStream.client.ts +47 -0
  988. package/plugin/stream/createHtmlStream.server.ts +312 -0
  989. package/plugin/stream/createHtmlStream.ts +13 -0
  990. package/plugin/stream/createHtmlStream.types.ts +63 -0
  991. package/plugin/stream/createMainThreadHandlers.ts +44 -0
  992. package/plugin/stream/createMessageChannels.ts +52 -0
  993. package/plugin/stream/createRenderToPipeableStreamHandler.client.ts +224 -0
  994. package/plugin/stream/createRenderToPipeableStreamHandler.server.ts +358 -0
  995. package/plugin/stream/createRenderToPipeableStreamHandler.ts +13 -0
  996. package/plugin/stream/createRenderToPipeableStreamHandler.types.ts +69 -0
  997. package/plugin/stream/createRscStream.client.ts +122 -0
  998. package/plugin/stream/createRscStream.server.ts +188 -0
  999. package/plugin/stream/createRscStream.ts +8 -0
  1000. package/plugin/stream/createRscStream.types.ts +168 -0
  1001. package/plugin/stream/createRscStream.utils.ts +171 -0
  1002. package/plugin/stream/createRscWorkerStream.ts +178 -0
  1003. package/plugin/stream/handleRscStream.client.ts +214 -0
  1004. package/plugin/stream/handleRscStream.server.ts +82 -0
  1005. package/plugin/stream/handleRscStream.ts +11 -0
  1006. package/plugin/stream/handleRscStream.types.ts +70 -0
  1007. package/plugin/stream/index.client.ts +15 -0
  1008. package/plugin/stream/index.server.ts +15 -0
  1009. package/plugin/stream/index.ts +137 -0
  1010. package/plugin/stream/renderRscStream.server.ts +182 -0
  1011. package/plugin/stream/renderRscStream.types.ts +43 -0
  1012. package/plugin/stream/renderRscStreamHelpers.server.ts +88 -0
  1013. package/plugin/stream/setMaxListeners.ts +30 -0
  1014. package/plugin/transformer/README.md +2 -381
  1015. package/plugin/transformer/createTransformerPlugin.ts +388 -0
  1016. package/plugin/transformer/plugin.client.ts +7 -0
  1017. package/plugin/transformer/plugin.server.ts +6 -140
  1018. package/plugin/transformer/transformerEnv.ts +49 -0
  1019. package/plugin/types/react-server-dom-esm.d.ts +269 -110
  1020. package/plugin/types/virtual-rsc-hmr.d.ts +21 -0
  1021. package/plugin/types.ts +637 -225
  1022. package/plugin/utils/createCallServer.ts +8 -18
  1023. package/plugin/utils/createReactFetcher.ts +87 -5
  1024. package/plugin/utils/env.ts +1 -1
  1025. package/plugin/utils/envUrls.node.ts +15 -10
  1026. package/plugin/utils/index.client.ts +8 -0
  1027. package/plugin/utils/index.server.ts +8 -0
  1028. package/plugin/utils/index.ts +5 -1
  1029. package/plugin/utils/routeToURL.ts +3 -4
  1030. package/plugin/utils/urls.ts +41 -9
  1031. package/plugin/utils/useRscHmr.ts +72 -0
  1032. package/plugin/vendor/vendor.client.ts +9 -7
  1033. package/plugin/vendor/vendor.server.ts +5 -4
  1034. package/plugin/vendor/vendor.static.ts +12 -0
  1035. package/plugin/vendor/vendor.ts +10 -5
  1036. package/plugin/worker/createWorker.ts +283 -41
  1037. package/plugin/worker/html/README.md +2 -65
  1038. package/plugin/worker/html/handleHtmlRender.ts +245 -0
  1039. package/plugin/worker/html/html-worker.development.tsx +5 -17
  1040. package/plugin/worker/html/html-worker.production.tsx +1 -1
  1041. package/plugin/worker/html/html-worker.ts +5 -5
  1042. package/plugin/worker/html/index.ts +6 -6
  1043. package/plugin/worker/html/messageHandler.tsx +317 -98
  1044. package/plugin/worker/html/state.ts +38 -0
  1045. package/plugin/worker/html/types.ts +108 -35
  1046. package/plugin/worker/rsc/README.md +2 -257
  1047. package/plugin/worker/rsc/createBundleLoader.ts +92 -0
  1048. package/plugin/worker/rsc/createRscWorkerLoader.ts +104 -0
  1049. package/plugin/worker/rsc/handleRscRender.ts +510 -0
  1050. package/plugin/worker/rsc/handlers.ts +159 -238
  1051. package/plugin/worker/rsc/hydrateRscRenderMessage.ts +118 -0
  1052. package/plugin/worker/rsc/messageHandler.tsx +1289 -56
  1053. package/plugin/worker/rsc/rsc-worker.development.ts +198 -185
  1054. package/plugin/worker/rsc/rsc-worker.production.ts +306 -21
  1055. package/plugin/worker/rsc/rsc-worker.tsx +3 -5
  1056. package/plugin/worker/rsc/state.ts +54 -2
  1057. package/plugin/worker/rsc/types.ts +110 -32
  1058. package/plugin/worker/rsc/workerUserOptions.ts +63 -0
  1059. package/plugin/worker/sendMessage.ts +33 -53
  1060. package/plugin/worker/types.ts +94 -91
  1061. package/scripts/generate-toc.mjs +311 -0
  1062. package/scripts/remove-toc.mjs +51 -0
  1063. package/scripts/test-both.sh +82 -0
  1064. package/dist/plugin/config/resolveDevServerConfig.d.ts +0 -2
  1065. package/dist/plugin/config/resolveDevServerConfig.d.ts.map +0 -1
  1066. package/dist/plugin/getNodeEnv.d.ts.map +0 -1
  1067. package/dist/plugin/getNodeEnv.js +0 -17
  1068. package/dist/plugin/helpers/collectBundleManifestCss.d.ts +0 -2
  1069. package/dist/plugin/helpers/collectBundleManifestCss.d.ts.map +0 -1
  1070. package/dist/plugin/helpers/collectBundleManifestCss.js +0 -2
  1071. package/dist/plugin/helpers/createEventHandler.d.ts +0 -22
  1072. package/dist/plugin/helpers/createEventHandler.d.ts.map +0 -1
  1073. package/dist/plugin/helpers/createEventHandler.js +0 -36
  1074. package/dist/plugin/helpers/createHandler.d.ts +0 -14
  1075. package/dist/plugin/helpers/createHandler.d.ts.map +0 -1
  1076. package/dist/plugin/helpers/createHandler.js +0 -75
  1077. package/dist/plugin/helpers/createRscStream.d.ts +0 -26
  1078. package/dist/plugin/helpers/createRscStream.d.ts.map +0 -1
  1079. package/dist/plugin/helpers/createRscStream.js +0 -174
  1080. package/dist/plugin/helpers/defaultFileWriter.d.ts +0 -2
  1081. package/dist/plugin/helpers/defaultFileWriter.d.ts.map +0 -1
  1082. package/dist/plugin/helpers/resolveComponents.d.ts +0 -27
  1083. package/dist/plugin/helpers/resolveComponents.d.ts.map +0 -1
  1084. package/dist/plugin/helpers/resolveComponents.js +0 -137
  1085. package/dist/plugin/helpers/resolveUserComponents.d.ts +0 -33
  1086. package/dist/plugin/helpers/resolveUserComponents.d.ts.map +0 -1
  1087. package/dist/plugin/helpers/resolveUserComponents.js +0 -163
  1088. package/dist/plugin/preserver/index.d.ts +0 -2
  1089. package/dist/plugin/preserver/index.d.ts.map +0 -1
  1090. package/dist/plugin/preserver/index.js +0 -1
  1091. package/dist/plugin/preserver/plugin.d.ts +0 -3
  1092. package/dist/plugin/preserver/plugin.d.ts.map +0 -1
  1093. package/dist/plugin/preserver/plugin.js +0 -134
  1094. package/dist/plugin/react-client/cleanupWorkerServerAction.d.ts +0 -11
  1095. package/dist/plugin/react-client/cleanupWorkerServerAction.d.ts.map +0 -1
  1096. package/dist/plugin/react-client/cleanupWorkerServerAction.js +0 -18
  1097. package/dist/plugin/react-client/configureWorkerRequestHandler.d.ts +0 -17
  1098. package/dist/plugin/react-client/configureWorkerRequestHandler.d.ts.map +0 -1
  1099. package/dist/plugin/react-client/configureWorkerRequestHandler.js +0 -209
  1100. package/dist/plugin/react-client/createWorkerStream.d.ts +0 -26
  1101. package/dist/plugin/react-client/createWorkerStream.d.ts.map +0 -1
  1102. package/dist/plugin/react-client/createWorkerStream.js +0 -163
  1103. package/dist/plugin/react-client/handleWorkerRscStream.d.ts +0 -24
  1104. package/dist/plugin/react-client/handleWorkerRscStream.d.ts.map +0 -1
  1105. package/dist/plugin/react-client/handleWorkerRscStream.js +0 -99
  1106. package/dist/plugin/react-client/handleWorkerServerAction.d.ts +0 -13
  1107. package/dist/plugin/react-client/handleWorkerServerAction.d.ts.map +0 -1
  1108. package/dist/plugin/react-client/handleWorkerServerAction.js +0 -62
  1109. package/dist/plugin/react-client/restartWorker.d.ts +0 -12
  1110. package/dist/plugin/react-client/restartWorker.d.ts.map +0 -1
  1111. package/dist/plugin/react-client/restartWorker.js +0 -70
  1112. package/dist/plugin/react-server/configureReactServer.d.ts +0 -10
  1113. package/dist/plugin/react-server/configureReactServer.d.ts.map +0 -1
  1114. package/dist/plugin/react-server/configureReactServer.js +0 -205
  1115. package/dist/plugin/react-server/handleServerAction.d.ts +0 -6
  1116. package/dist/plugin/react-server/handleServerAction.d.ts.map +0 -1
  1117. package/dist/plugin/react-server/handleServerAction.js +0 -159
  1118. package/dist/plugin/react-static/collectHtmlWorkerContent.d.ts +0 -25
  1119. package/dist/plugin/react-static/collectHtmlWorkerContent.d.ts.map +0 -1
  1120. package/dist/plugin/react-static/collectHtmlWorkerContent.js +0 -94
  1121. package/dist/plugin/react-static/streamHandler.d.ts +0 -2
  1122. package/dist/plugin/react-static/streamHandler.d.ts.map +0 -1
  1123. package/dist/plugin/worker/html/createHtmlWorkerRenderState.d.ts +0 -12
  1124. package/dist/plugin/worker/html/createHtmlWorkerRenderState.d.ts.map +0 -1
  1125. package/dist/plugin/worker/html/createHtmlWorkerRenderState.js +0 -130
  1126. package/dist/plugin/worker/html/sendHtmlWorkerMessage.d.ts +0 -3
  1127. package/dist/plugin/worker/html/sendHtmlWorkerMessage.d.ts.map +0 -1
  1128. package/dist/plugin/worker/html/sendHtmlWorkerMessage.js +0 -2
  1129. package/dist/plugin/worker/rsc/handleRender.d.ts +0 -5
  1130. package/dist/plugin/worker/rsc/handleRender.d.ts.map +0 -1
  1131. package/dist/plugin/worker/rsc/handleRender.js +0 -140
  1132. package/dist/plugin/worker/rsc/sendRscWorkerMessage.d.ts +0 -3
  1133. package/dist/plugin/worker/rsc/sendRscWorkerMessage.d.ts.map +0 -1
  1134. package/dist/plugin/worker/rsc/sendRscWorkerMessage.js +0 -11
  1135. package/dist/plugin/worker/rsc/userOptions.d.ts +0 -2
  1136. package/dist/plugin/worker/rsc/userOptions.d.ts.map +0 -1
  1137. package/dist/plugin/worker/rsc/userOptions.js +0 -16
  1138. package/plugin/helpers/collectBundleManifestCss.ts +0 -1
  1139. package/plugin/helpers/createEventHandler.ts +0 -44
  1140. package/plugin/helpers/createHandler.ts +0 -97
  1141. package/plugin/helpers/createRscStream.tsx +0 -221
  1142. package/plugin/helpers/defaultFileWriter.ts +0 -0
  1143. package/plugin/helpers/resolveComponents.ts +0 -185
  1144. package/plugin/helpers/resolveUserComponents.ts +0 -190
  1145. package/plugin/preserver/index.ts +0 -1
  1146. package/plugin/preserver/plugin.ts +0 -178
  1147. package/plugin/react-client/cleanupWorkerServerAction.ts +0 -33
  1148. package/plugin/react-client/configureWorkerRequestHandler.ts +0 -255
  1149. package/plugin/react-client/createWorkerStream.ts +0 -210
  1150. package/plugin/react-client/handleWorkerRscStream.ts +0 -156
  1151. package/plugin/react-client/handleWorkerServerAction.ts +0 -96
  1152. package/plugin/react-client/restartWorker.ts +0 -91
  1153. package/plugin/react-server/configureReactServer.ts +0 -231
  1154. package/plugin/react-server/handleServerAction.ts +0 -192
  1155. package/plugin/react-static/collectHtmlWorkerContent.ts +0 -147
  1156. package/plugin/react-static/streamHandler.ts +0 -0
  1157. package/plugin/worker/html/createHtmlWorkerRenderState.tsx +0 -142
  1158. package/plugin/worker/html/sendHtmlWorkerMessage.ts +0 -8
  1159. package/plugin/worker/rsc/handleRender.ts +0 -175
  1160. package/plugin/worker/rsc/sendRscWorkerMessage.ts +0 -7
  1161. package/plugin/worker/rsc/userOptions.ts +0 -7
  1162. /package/dist/plugin/config/{resolveDevServerConfig.js → createHandlerOptions.types.js} +0 -0
  1163. /package/dist/plugin/{helpers/defaultFileWriter.js → dev-server/types.js} +0 -0
  1164. /package/dist/plugin/{react-static/streamHandler.js → error/types.js} +0 -0
  1165. /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 { renderPage } from './renderPage.js';
10
+ import { createStreamMetrics } from '../metrics/createStreamMetrics.js';
8
11
 
9
- const renderPages = async function* _renderPages(autoDiscoveredFiles, handlerOptions, cssFilesByPage) {
10
- const routes = Array.from(autoDiscoveredFiles.urlMap.keys());
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 Set();
13
- const baseMetrics = createRenderMetrics(routes[0]);
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
- throw new Error("No urlMap provided to renderPages");
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
- for (const route of routes) {
20
- const { page, props, root, html } = autoDiscoveredFiles.urlMap.get(route) || {};
21
- if (!page) continue;
22
- try {
23
- const pageRenderer = renderPage({
24
- ...handlerOptions,
25
- route,
26
- pagePath: page,
27
- propsPath: props,
28
- rootPath: root,
29
- htmlPath: html,
30
- cssFiles: cssFilesByPage.get(route) ?? /* @__PURE__ */ new Map()
31
- });
32
- for await (const result of pageRenderer) {
33
- if (result.type === "skip") continue;
34
- if (result.type === "error") {
35
- failedRoutes.add(route);
36
- errors.push(result.error);
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: result.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
- continue;
474
+ break;
48
475
  }
49
- if (result.type === "success") {
50
- completedRoutes.add(route);
51
- results.set(route, {
52
- html: result.html,
53
- rsc: result.rsc,
54
- metrics: result.metrics
55
- });
56
- baseMetrics.htmlSizes.set(route, result.metrics.rscFull.bytes);
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: err instanceof Error ? err : new Error(String(err)),
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
- htmlSizes: baseMetrics.htmlSizes,
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: "error",
105
- error: errors[0],
106
- failedRoutes,
558
+ type: "success",
107
559
  completedRoutes,
108
- htmlSizes: baseMetrics.htmlSizes,
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/PyBuZXcgTWFwKCksXG4gICAgICB9KTtcblxuICAgICAgZm9yIGF3YWl0IChjb25zdCByZXN1bHQgb2YgcGFnZVJlbmRlcmVyKSB7XG4gICAgICAgIGlmIChyZXN1bHQudHlwZSA9PT0gXCJza2lwXCIpIGNvbnRpbnVlO1xuXG4gICAgICAgIGlmIChyZXN1bHQudHlwZSA9PT0gXCJlcnJvclwiKSB7XG4gICAgICAgICAgZmFpbGVkUm91dGVzLmFkZChyb3V0ZSk7XG4gICAgICAgICAgZXJyb3JzLnB1c2gocmVzdWx0LmVycm9yKTtcbiAgICAgICAgICB5aWVsZCB7XG4gICAgICAgICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICAgICAgICBlcnJvcjogcmVzdWx0LmVycm9yLFxuICAgICAgICAgICAgZmFpbGVkUm91dGVzLFxuICAgICAgICAgICAgY29tcGxldGVkUm91dGVzLFxuICAgICAgICAgICAgaHRtbFNpemVzOiBiYXNlTWV0cmljcy5odG1sU2l6ZXMsXG4gICAgICAgICAgICByc2NTaXplczogYmFzZU1ldHJpY3MucnNjU2l6ZXMsXG4gICAgICAgICAgICBzdHJlYW1NZXRyaWNzOiBiYXNlTWV0cmljcy5zdHJlYW1NZXRyaWNzLFxuICAgICAgICAgICAgcmVzdWx0cyxcbiAgICAgICAgICB9IGFzIGNvbnN0O1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHJlc3VsdC50eXBlID09PSBcInN1Y2Nlc3NcIikge1xuICAgICAgICAgIGNvbXBsZXRlZFJvdXRlcy5hZGQocm91dGUpO1xuICAgICAgICAgIHJlc3VsdHMuc2V0KHJvdXRlLCB7XG4gICAgICAgICAgICBodG1sOiByZXN1bHQuaHRtbCxcbiAgICAgICAgICAgIHJzYzogcmVzdWx0LnJzYyxcbiAgICAgICAgICAgIG1ldHJpY3M6IHJlc3VsdC5tZXRyaWNzLFxuICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgLy8gVXBkYXRlIG1ldHJpY3NcbiAgICAgICAgICBiYXNlTWV0cmljcy5odG1sU2l6ZXMuc2V0KHJvdXRlLCByZXN1bHQubWV0cmljcy5yc2NGdWxsLmJ5dGVzKTtcbiAgICAgICAgICBiYXNlTWV0cmljcy5yc2NTaXplcy5zZXQocm91dGUsIHJlc3VsdC5tZXRyaWNzLnJzY0hlYWRsZXNzLmJ5dGVzKTtcbiAgICAgICAgICBiYXNlTWV0cmljcy5zdHJlYW1NZXRyaWNzID0ge1xuICAgICAgICAgICAgLi4uYmFzZU1ldHJpY3Muc3RyZWFtTWV0cmljcyxcbiAgICAgICAgICAgIGNodW5rczogTWF0aC5tYXgoXG4gICAgICAgICAgICAgIGJhc2VNZXRyaWNzLnN0cmVhbU1ldHJpY3MuY2h1bmtzLFxuICAgICAgICAgICAgICByZXN1bHQubWV0cmljcy5yc2NGdWxsLmNodW5rc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGJ5dGVzOiBNYXRoLm1heChcbiAgICAgICAgICAgICAgYmFzZU1ldHJpY3Muc3RyZWFtTWV0cmljcy5ieXRlcyxcbiAgICAgICAgICAgICAgcmVzdWx0Lm1ldHJpY3MucnNjRnVsbC5ieXRlc1xuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIGR1cmF0aW9uOiBNYXRoLm1heChcbiAgICAgICAgICAgICAgYmFzZU1ldHJpY3Muc3RyZWFtTWV0cmljcy5kdXJhdGlvbixcbiAgICAgICAgICAgICAgcmVzdWx0Lm1ldHJpY3MucnNjRnVsbC5kdXJhdGlvblxuICAgICAgICAgICAgKSxcbiAgICAgICAgICAgIHN0YXJ0VGltZTogTWF0aC5taW4oXG4gICAgICAgICAgICAgIGJhc2VNZXRyaWNzLnN0cmVhbU1ldHJpY3Muc3RhcnRUaW1lLFxuICAgICAgICAgICAgICByZXN1bHQubWV0cmljcy5yc2NGdWxsLnN0YXJ0VGltZVxuICAgICAgICAgICAgKSxcbiAgICAgICAgICB9O1xuXG4gICAgICAgICAgeWllbGQge1xuICAgICAgICAgICAgdHlwZTogXCJzdWNjZXNzXCIsXG4gICAgICAgICAgICBjb21wbGV0ZWRSb3V0ZXMsXG4gICAgICAgICAgICBodG1sU2l6ZXM6IGJhc2VNZXRyaWNzLmh0bWxTaXplcyxcbiAgICAgICAgICAgIHJzY1NpemVzOiBiYXNlTWV0cmljcy5yc2NTaXplcyxcbiAgICAgICAgICAgIHN0cmVhbU1ldHJpY3M6IGJhc2VNZXRyaWNzLnN0cmVhbU1ldHJpY3MsXG4gICAgICAgICAgICByZXN1bHRzLFxuICAgICAgICAgIH0gYXMgY29uc3Q7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgIGZhaWxlZFJvdXRlcy5hZGQocm91dGUpO1xuICAgICAgZXJyb3JzLnB1c2goZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpKTtcbiAgICAgIHlpZWxkIHtcbiAgICAgICAgdHlwZTogXCJlcnJvclwiLFxuICAgICAgICBlcnJvcjogZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIgOiBuZXcgRXJyb3IoU3RyaW5nKGVycikpLFxuICAgICAgICBmYWlsZWRSb3V0ZXMsXG4gICAgICAgIGNvbXBsZXRlZFJvdXRlcyxcbiAgICAgICAgaHRtbFNpemVzOiBiYXNlTWV0cmljcy5odG1sU2l6ZXMsXG4gICAgICAgIHJzY1NpemVzOiBiYXNlTWV0cmljcy5yc2NTaXplcyxcbiAgICAgICAgc3RyZWFtTWV0cmljczogYmFzZU1ldHJpY3Muc3RyZWFtTWV0cmljcyxcbiAgICAgICAgcmVzdWx0cyxcbiAgICAgIH0gYXMgY29uc3Q7XG4gICAgfVxuICB9XG5cbiAgaWYgKGZhaWxlZFJvdXRlcy5zaXplID4gMCkge1xuICAgIHJldHVybiB7XG4gICAgICB0eXBlOiBcImVycm9yXCIsXG4gICAgICBlcnJvcjogZXJyb3JzWzBdLFxuICAgICAgZmFpbGVkUm91dGVzLFxuICAgICAgY29tcGxldGVkUm91dGVzLFxuICAgICAgaHRtbFNpemVzOiBiYXNlTWV0cmljcy5odG1sU2l6ZXMsXG4gICAgICByc2NTaXplczogYmFzZU1ldHJpY3MucnNjU2l6ZXMsXG4gICAgICBzdHJlYW1NZXRyaWNzOiBiYXNlTWV0cmljcy5zdHJlYW1NZXRyaWNzLFxuICAgICAgcmVzdWx0cyxcbiAgICB9IGFzIGNvbnN0O1xuICB9XG5cbiAgcmV0dXJuIHtcbiAgICB0eXBlOiBcInN1Y2Nlc3NcIixcbiAgICBjb21wbGV0ZWRSb3V0ZXMsXG4gICAgZmFpbGVkUm91dGVzOiB1bmRlZmluZWQsXG4gICAgaHRtbFNpemVzOiBiYXNlTWV0cmljcy5odG1sU2l6ZXMsXG4gICAgcnNjU2l6ZXM6IGJhc2VNZXRyaWNzLnJzY1NpemVzLFxuICAgIHN0cmVhbU1ldHJpY3M6IGJhc2VNZXRyaWNzLnN0cmVhbU1ldHJpY3MsXG4gICAgcmVzdWx0cyxcbiAgfSBhcyBjb25zdDtcbn1cbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7OztBQWdDTyxNQUFNLFdBQTZCLEdBQUEsZ0JBQWdCLFlBQ3hELENBQUEsbUJBQUEsRUFDQSxnQkFDQSxjQUNBLEVBQUE7QUFDQSxFQUFBLE1BQU0sU0FBUyxLQUFNLENBQUEsSUFBQSxDQUFLLG1CQUFvQixDQUFBLE1BQUEsQ0FBTyxNQUFNLENBQUE7QUFDM0QsRUFBTSxNQUFBLGVBQUEsdUJBQXNCLEdBQVksRUFBQTtBQUN4QyxFQUFNLE1BQUEsWUFBQSx1QkFBbUIsR0FBWSxFQUFBO0FBQ3JDLEVBQUEsTUFBTSxXQUFjLEdBQUEsbUJBQUEsQ0FBb0IsTUFBTyxDQUFBLENBQUMsQ0FBQyxDQUFBO0FBQ2pELEVBQU0sTUFBQSxPQUFBLHVCQUFjLEdBVWxCLEVBQUE7QUFDRixFQUFBLE1BQU0sU0FBa0IsRUFBQztBQUV6QixFQUFJLElBQUEsQ0FBQyxvQkFBb0IsTUFBUSxFQUFBO0FBQy9CLElBQU0sTUFBQSxJQUFJLE1BQU0sbUNBQW1DLENBQUE7QUFBQTtBQUdyRCxFQUFBLEtBQUEsTUFBVyxTQUFTLE1BQVEsRUFBQTtBQUMxQixJQUFNLE1BQUEsRUFBRSxJQUFNLEVBQUEsS0FBQSxFQUFPLElBQU0sRUFBQSxJQUFBLEVBQVMsR0FBQSxtQkFBQSxDQUFvQixNQUFPLENBQUEsR0FBQSxDQUFJLEtBQUssQ0FBQSxJQUFLLEVBQUM7QUFDOUUsSUFBQSxJQUFJLENBQUMsSUFBTSxFQUFBO0FBRVgsSUFBSSxJQUFBO0FBQ0YsTUFBQSxNQUFNLGVBQWUsVUFBVyxDQUFBO0FBQUEsUUFDOUIsR0FBRyxjQUFBO0FBQUEsUUFDSCxLQUFBO0FBQUEsUUFDQSxRQUFVLEVBQUEsSUFBQTtBQUFBLFFBQ1YsU0FBVyxFQUFBLEtBQUE7QUFBQSxRQUNYLFFBQVUsRUFBQSxJQUFBO0FBQUEsUUFDVixRQUFVLEVBQUEsSUFBQTtBQUFBLFFBQ1YsVUFBVSxjQUFlLENBQUEsR0FBQSxDQUFJLEtBQUssQ0FBQSx3QkFBUyxHQUFJO0FBQUEsT0FDaEQsQ0FBQTtBQUVELE1BQUEsV0FBQSxNQUFpQixVQUFVLFlBQWMsRUFBQTtBQUN2QyxRQUFJLElBQUEsTUFBQSxDQUFPLFNBQVMsTUFBUSxFQUFBO0FBRTVCLFFBQUksSUFBQSxNQUFBLENBQU8sU0FBUyxPQUFTLEVBQUE7QUFDM0IsVUFBQSxZQUFBLENBQWEsSUFBSSxLQUFLLENBQUE7QUFDdEIsVUFBTyxNQUFBLENBQUEsSUFBQSxDQUFLLE9BQU8sS0FBSyxDQUFBO0FBQ3hCLFVBQU0sTUFBQTtBQUFBLFlBQ0osSUFBTSxFQUFBLE9BQUE7QUFBQSxZQUNOLE9BQU8sTUFBTyxDQUFBLEtBQUE7QUFBQSxZQUNkLFlBQUE7QUFBQSxZQUNBLGVBQUE7QUFBQSxZQUNBLFdBQVcsV0FBWSxDQUFBLFNBQUE7QUFBQSxZQUN2QixVQUFVLFdBQVksQ0FBQSxRQUFBO0FBQUEsWUFDdEIsZUFBZSxXQUFZLENBQUEsYUFBQTtBQUFBLFlBQzNCO0FBQUEsV0FDRjtBQUNBLFVBQUE7QUFBQTtBQUdGLFFBQUksSUFBQSxNQUFBLENBQU8sU0FBUyxTQUFXLEVBQUE7QUFDN0IsVUFBQSxlQUFBLENBQWdCLElBQUksS0FBSyxDQUFBO0FBQ3pCLFVBQUEsT0FBQSxDQUFRLElBQUksS0FBTyxFQUFBO0FBQUEsWUFDakIsTUFBTSxNQUFPLENBQUEsSUFBQTtBQUFBLFlBQ2IsS0FBSyxNQUFPLENBQUEsR0FBQTtBQUFBLFlBQ1osU0FBUyxNQUFPLENBQUE7QUFBQSxXQUNqQixDQUFBO0FBR0QsVUFBQSxXQUFBLENBQVksVUFBVSxHQUFJLENBQUEsS0FBQSxFQUFPLE1BQU8sQ0FBQSxPQUFBLENBQVEsUUFBUSxLQUFLLENBQUE7QUFDN0QsVUFBQSxXQUFBLENBQVksU0FBUyxHQUFJLENBQUEsS0FBQSxFQUFPLE1BQU8sQ0FBQSxPQUFBLENBQVEsWUFBWSxLQUFLLENBQUE7QUFDaEUsVUFBQSxXQUFBLENBQVksYUFBZ0IsR0FBQTtBQUFBLFlBQzFCLEdBQUcsV0FBWSxDQUFBLGFBQUE7QUFBQSxZQUNmLFFBQVEsSUFBSyxDQUFBLEdBQUE7QUFBQSxjQUNYLFlBQVksYUFBYyxDQUFBLE1BQUE7QUFBQSxjQUMxQixNQUFBLENBQU8sUUFBUSxPQUFRLENBQUE7QUFBQSxhQUN6QjtBQUFBLFlBQ0EsT0FBTyxJQUFLLENBQUEsR0FBQTtBQUFBLGNBQ1YsWUFBWSxhQUFjLENBQUEsS0FBQTtBQUFBLGNBQzFCLE1BQUEsQ0FBTyxRQUFRLE9BQVEsQ0FBQTtBQUFBLGFBQ3pCO0FBQUEsWUFDQSxVQUFVLElBQUssQ0FBQSxHQUFBO0FBQUEsY0FDYixZQUFZLGFBQWMsQ0FBQSxRQUFBO0FBQUEsY0FDMUIsTUFBQSxDQUFPLFFBQVEsT0FBUSxDQUFBO0FBQUEsYUFDekI7QUFBQSxZQUNBLFdBQVcsSUFBSyxDQUFBLEdBQUE7QUFBQSxjQUNkLFlBQVksYUFBYyxDQUFBLFNBQUE7QUFBQSxjQUMxQixNQUFBLENBQU8sUUFBUSxPQUFRLENBQUE7QUFBQTtBQUN6QixXQUNGO0FBRUEsVUFBTSxNQUFBO0FBQUEsWUFDSixJQUFNLEVBQUEsU0FBQTtBQUFBLFlBQ04sZUFBQTtBQUFBLFlBQ0EsV0FBVyxXQUFZLENBQUEsU0FBQTtBQUFBLFlBQ3ZCLFVBQVUsV0FBWSxDQUFBLFFBQUE7QUFBQSxZQUN0QixlQUFlLFdBQVksQ0FBQSxhQUFBO0FBQUEsWUFDM0I7QUFBQSxXQUNGO0FBQUE7QUFDRjtBQUNGLGFBQ08sR0FBSyxFQUFBO0FBQ1osTUFBQSxZQUFBLENBQWEsSUFBSSxLQUFLLENBQUE7QUFDdEIsTUFBTyxNQUFBLENBQUEsSUFBQSxDQUFLLGVBQWUsS0FBUSxHQUFBLEdBQUEsR0FBTSxJQUFJLEtBQU0sQ0FBQSxNQUFBLENBQU8sR0FBRyxDQUFDLENBQUMsQ0FBQTtBQUMvRCxNQUFNLE1BQUE7QUFBQSxRQUNKLElBQU0sRUFBQSxPQUFBO0FBQUEsUUFDTixLQUFBLEVBQU8sZUFBZSxLQUFRLEdBQUEsR0FBQSxHQUFNLElBQUksS0FBTSxDQUFBLE1BQUEsQ0FBTyxHQUFHLENBQUMsQ0FBQTtBQUFBLFFBQ3pELFlBQUE7QUFBQSxRQUNBLGVBQUE7QUFBQSxRQUNBLFdBQVcsV0FBWSxDQUFBLFNBQUE7QUFBQSxRQUN2QixVQUFVLFdBQVksQ0FBQSxRQUFBO0FBQUEsUUFDdEIsZUFBZSxXQUFZLENBQUEsYUFBQTtBQUFBLFFBQzNCO0FBQUEsT0FDRjtBQUFBO0FBQ0Y7QUFHRixFQUFJLElBQUEsWUFBQSxDQUFhLE9BQU8sQ0FBRyxFQUFBO0FBQ3pCLElBQU8sT0FBQTtBQUFBLE1BQ0wsSUFBTSxFQUFBLE9BQUE7QUFBQSxNQUNOLEtBQUEsRUFBTyxPQUFPLENBQUMsQ0FBQTtBQUFBLE1BQ2YsWUFBQTtBQUFBLE1BQ0EsZUFBQTtBQUFBLE1BQ0EsV0FBVyxXQUFZLENBQUEsU0FBQTtBQUFBLE1BQ3ZCLFVBQVUsV0FBWSxDQUFBLFFBQUE7QUFBQSxNQUN0QixlQUFlLFdBQVksQ0FBQSxhQUFBO0FBQUEsTUFDM0I7QUFBQSxLQUNGO0FBQUE7QUFHRixFQUFPLE9BQUE7QUFBQSxJQUNMLElBQU0sRUFBQSxTQUFBO0FBQUEsSUFDTixlQUFBO0FBQUEsSUFDQSxZQUFjLEVBQUEsTUFBQTtBQUFBLElBQ2QsV0FBVyxXQUFZLENBQUEsU0FBQTtBQUFBLElBQ3ZCLFVBQVUsV0FBWSxDQUFBLFFBQUE7QUFBQSxJQUN0QixlQUFlLFdBQVksQ0FBQSxhQUFBO0FBQUEsSUFDM0I7QUFBQSxHQUNGO0FBQ0Y7Ozs7In0=
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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