vite-plugin-react-server 1.4.1 → 1.4.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (146) hide show
  1. package/README.md +48 -313
  2. package/dist/package.json +123 -13
  3. package/dist/plugin/bundle/deferredStaticGeneration.js +14 -39
  4. package/dist/plugin/bundle/manifests.js +30 -48
  5. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.d.ts.map +1 -1
  6. package/dist/plugin/config/autoDiscover/resolveAutoDiscover.js +4 -1
  7. package/dist/plugin/config/envPrefixFromConfig.js +12 -7
  8. package/dist/plugin/config/getCondition.d.ts.map +1 -1
  9. package/dist/plugin/config/getCondition.js +7 -5
  10. package/dist/plugin/dev-server/configureReactServer.server.d.ts.map +1 -1
  11. package/dist/plugin/dev-server/configureReactServer.server.js +5 -8
  12. package/dist/plugin/dev-server/plugin.client.d.ts.map +1 -1
  13. package/dist/plugin/dev-server/plugin.client.js +2 -1
  14. package/dist/plugin/dev-server/plugin.server.d.ts.map +1 -1
  15. package/dist/plugin/dev-server/plugin.server.js +2 -36
  16. package/dist/plugin/dev-server/virtualRscHmrPlugin.js +23 -23
  17. package/dist/plugin/environments/createBuildEventPlugin.js +88 -98
  18. package/dist/plugin/environments/createEnvironmentPlugin.js +222 -250
  19. package/dist/plugin/error/index.d.ts +1 -2
  20. package/dist/plugin/error/index.d.ts.map +1 -1
  21. package/dist/plugin/error/index.js +2 -3
  22. package/dist/plugin/error/panicThresholdHandler.js +14 -3
  23. package/dist/plugin/error/setupGlobalErrorHandler.d.ts.map +1 -1
  24. package/dist/plugin/error/setupGlobalErrorHandler.js +23 -16
  25. package/dist/plugin/helpers/createRscRenderHelpers.d.ts +0 -5
  26. package/dist/plugin/helpers/createRscRenderHelpers.d.ts.map +1 -1
  27. package/dist/plugin/helpers/createRscRenderHelpers.js +32 -55
  28. package/dist/plugin/helpers/createSharedLoader.d.ts.map +1 -1
  29. package/dist/plugin/helpers/createSharedLoader.js +4 -2
  30. package/dist/plugin/helpers/headlessStreamReuseHandler.js +30 -22
  31. package/dist/plugin/helpers/headlessStreamState.d.ts +0 -38
  32. package/dist/plugin/helpers/headlessStreamState.d.ts.map +1 -1
  33. package/dist/plugin/helpers/headlessStreamState.js +15 -76
  34. package/dist/plugin/helpers/index.d.ts +0 -3
  35. package/dist/plugin/helpers/index.d.ts.map +1 -1
  36. package/dist/plugin/helpers/index.js +1 -4
  37. package/dist/plugin/helpers/requestInfo.d.ts.map +1 -1
  38. package/dist/plugin/helpers/requestInfo.js +3 -3
  39. package/dist/plugin/helpers/resolveComponent.d.ts.map +1 -1
  40. package/dist/plugin/helpers/resolveComponent.js +4 -2
  41. package/dist/plugin/helpers/workerCleanup.d.ts +1 -12
  42. package/dist/plugin/helpers/workerCleanup.d.ts.map +1 -1
  43. package/dist/plugin/helpers/workerCleanup.js +1 -1
  44. package/dist/plugin/index.client.d.ts +5 -0
  45. package/dist/plugin/index.client.d.ts.map +1 -0
  46. package/dist/plugin/index.client.js +4 -0
  47. package/dist/plugin/index.d.ts +4 -3
  48. package/dist/plugin/index.d.ts.map +1 -1
  49. package/dist/plugin/index.js +10 -5
  50. package/dist/plugin/index.server.d.ts +5 -0
  51. package/dist/plugin/index.server.d.ts.map +1 -0
  52. package/dist/plugin/index.server.js +4 -0
  53. package/dist/plugin/loader/directives/index.d.ts +0 -1
  54. package/dist/plugin/loader/directives/index.d.ts.map +1 -1
  55. package/dist/plugin/loader/directives/index.js +1 -2
  56. package/dist/plugin/metrics/createWorkerStartupMetrics.js +31 -13
  57. package/dist/plugin/orchestrator/createPluginOrchestrator.client.js +41 -38
  58. package/dist/plugin/orchestrator/createPluginOrchestrator.server.js +43 -46
  59. package/dist/plugin/plugin.client.js +2 -2
  60. package/dist/plugin/plugin.server.js +2 -2
  61. package/dist/plugin/react-static/createBuildLoader.client.js +12 -6
  62. package/dist/plugin/react-static/createBuildLoader.server.js +255 -235
  63. package/dist/plugin/react-static/plugin.client.js +684 -770
  64. package/dist/plugin/react-static/plugin.server.js +517 -603
  65. package/dist/plugin/react-static/processCssFilesForPages.js +103 -88
  66. package/dist/plugin/react-static/renderPage.client.js +455 -529
  67. package/dist/plugin/react-static/renderPage.server.js +485 -508
  68. package/dist/plugin/react-static/renderPagesBatched.js +277 -275
  69. package/dist/plugin/react-static/rscToHtmlStream.client.js +48 -29
  70. package/dist/plugin/react-static/rscToHtmlStream.server.js +62 -37
  71. package/dist/plugin/react-static/temporaryReferences.server.js +11 -2
  72. package/dist/plugin/stream/createMainThreadHandlers.js +40 -31
  73. package/dist/plugin/stream/renderRscStream.server.d.ts.map +1 -1
  74. package/dist/plugin/stream/renderRscStream.server.js +127 -144
  75. package/dist/plugin/transformer/createTransformerPlugin.js +226 -265
  76. package/dist/plugin/utils/checkReactVersion.d.ts +7 -0
  77. package/dist/plugin/utils/checkReactVersion.d.ts.map +1 -0
  78. package/dist/plugin/utils/checkReactVersion.js +23 -0
  79. package/dist/plugin/utils/envUrls.node.js +12 -11
  80. package/dist/plugin/vendor/vendor-alias.js +84 -114
  81. package/dist/plugin/vendor/vendor.client.d.ts.map +1 -1
  82. package/dist/plugin/vendor/vendor.client.js +1 -3
  83. package/dist/plugin/worker/rsc/handleRscRender.d.ts.map +1 -1
  84. package/dist/plugin/worker/rsc/handleRscRender.js +3 -1
  85. package/dist/tsconfig.tsbuildinfo +1 -1
  86. package/package.json +123 -13
  87. package/plugin/config/autoDiscover/resolveAutoDiscover.ts +4 -0
  88. package/plugin/config/getCondition.ts +6 -4
  89. package/plugin/dev-server/configureReactServer.server.ts +7 -10
  90. package/plugin/dev-server/plugin.client.ts +2 -0
  91. package/plugin/dev-server/plugin.server.ts +2 -49
  92. package/plugin/error/index.ts +1 -2
  93. package/plugin/error/setupGlobalErrorHandler.ts +24 -25
  94. package/plugin/helpers/createRscRenderHelpers.ts +0 -29
  95. package/plugin/helpers/createSharedLoader.ts +6 -1
  96. package/plugin/helpers/headlessStreamState.ts +0 -69
  97. package/plugin/helpers/index.ts +0 -3
  98. package/plugin/helpers/requestInfo.ts +1 -2
  99. package/plugin/helpers/resolveComponent.ts +6 -1
  100. package/plugin/helpers/workerCleanup.ts +1 -38
  101. package/plugin/index.client.ts +4 -0
  102. package/plugin/index.server.ts +4 -0
  103. package/plugin/index.ts +12 -5
  104. package/plugin/loader/directives/index.ts +0 -1
  105. package/plugin/plugin.client.ts +1 -1
  106. package/plugin/plugin.server.ts +1 -1
  107. package/plugin/stream/renderRscStream.server.ts +3 -0
  108. package/plugin/transformer/README.md +1 -1
  109. package/plugin/utils/checkReactVersion.ts +28 -0
  110. package/plugin/vendor/vendor.client.ts +0 -2
  111. package/plugin/worker/html/README.md +1 -1
  112. package/plugin/worker/rsc/README.md +1 -1
  113. package/plugin/worker/rsc/handleRscRender.ts +2 -0
  114. package/scripts/generate-toc.mjs +27 -294
  115. package/dist/plugin/error/assertPanic.d.ts +0 -2
  116. package/dist/plugin/error/assertPanic.d.ts.map +0 -1
  117. package/dist/plugin/error/assertPanic.js +0 -15
  118. package/dist/plugin/error/directiveError.d.ts +0 -13
  119. package/dist/plugin/error/directiveError.d.ts.map +0 -1
  120. package/dist/plugin/error/directiveError.js +0 -21
  121. package/dist/plugin/error/enhanceError.d.ts +0 -14
  122. package/dist/plugin/error/enhanceError.d.ts.map +0 -1
  123. package/dist/plugin/error/enhanceError.js +0 -24
  124. package/dist/plugin/helpers/createSafePageComponent.d.ts +0 -36
  125. package/dist/plugin/helpers/createSafePageComponent.d.ts.map +0 -1
  126. package/dist/plugin/helpers/createSafePageComponent.js +0 -50
  127. package/dist/plugin/helpers/moduleResolver.d.ts +0 -25
  128. package/dist/plugin/helpers/moduleResolver.d.ts.map +0 -1
  129. package/dist/plugin/helpers/moduleResolver.js +0 -64
  130. package/dist/plugin/helpers/stashReturnValue.d.ts +0 -3
  131. package/dist/plugin/helpers/stashReturnValue.d.ts.map +0 -1
  132. package/dist/plugin/helpers/stashReturnValue.js +0 -23
  133. package/dist/plugin/helpers/workerManager.d.ts +0 -5
  134. package/dist/plugin/helpers/workerManager.d.ts.map +0 -1
  135. package/dist/plugin/helpers/workerManager.js +0 -18
  136. package/dist/plugin/loader/directives/collectExportsFromModule.d.ts +0 -6
  137. package/dist/plugin/loader/directives/collectExportsFromModule.d.ts.map +0 -1
  138. package/dist/plugin/loader/directives/collectExportsFromModule.js +0 -24
  139. package/plugin/error/assertPanic.ts +0 -9
  140. package/plugin/error/directiveError.ts +0 -29
  141. package/plugin/error/enhanceError.ts +0 -41
  142. package/plugin/helpers/createSafePageComponent.ts +0 -64
  143. package/plugin/helpers/moduleResolver.ts +0 -91
  144. package/plugin/helpers/stashReturnValue.ts +0 -19
  145. package/plugin/helpers/workerManager.ts +0 -16
  146. package/plugin/loader/directives/collectExportsFromModule.ts +0 -25
@@ -72,6 +72,7 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevClient(option
72
72
  const normalizedFile = file.replace(projectRoot, "").replace(/^\/+/, "");
73
73
  const isSourceFile = normalizedFile.startsWith(moduleBase + "/") && (file.endsWith(".tsx") || file.endsWith(".ts") || file.endsWith(".jsx") || file.endsWith(".js"));
74
74
  const isClientFile = isSourceFile && (() => {
75
+ if (/\.client\.(js|ts|jsx|tsx)$/.test(file)) return true;
75
76
  try {
76
77
  const head = readFileSync(file, "utf-8").slice(0, 200);
77
78
  return /^\s*["']use client["']/.test(head.split("\n")[0]);
@@ -121,4 +122,4 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevClient(option
121
122
  };
122
123
 
123
124
  export { vitePluginReactDevServer };
124
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmNsaWVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Rldi1zZXJ2ZXIvcGx1Z2luLmNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHR5cGUgeyBWaXRlUGx1Z2luRm4gfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGNvbmZpZ3VyZVJlYWN0U2VydmVyIH0gZnJvbSBcIi4vY29uZmlndXJlUmVhY3RTZXJ2ZXIuY2xpZW50LmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZU9wdGlvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlnRW52IH0gZnJvbSBcInZpdGVcIjtcblxuXG4vKipcbiAqIERldiBzZXJ2ZXIgcGx1Z2luIGZvciBjbGllbnQgZW52aXJvbm1lbnQuXG4gKiBVc2VzIGNvbmZpZ3VyZVNlcnZlciBob29rIGZvciBwcm9wZXIgZGV2IHNlcnZlciBzZXR1cC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZpdGVQbHVnaW5SZWFjdERldlNlcnZlcjogVml0ZVBsdWdpbkZuID0gZnVuY3Rpb24gX3ZpdGVQbHVnaW5SZWFjdFNlcnZlckRldkNsaWVudChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJvcHRpb25zIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICB9XG4gIFxuICBjb25zdCByZXNvbHZlZE9wdGlvbnMgPSByZXNvbHZlT3B0aW9ucyhvcHRpb25zKTtcbiAgaWYgKHJlc29sdmVkT3B0aW9ucy50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICBpZiAocmVzb2x2ZWRPcHRpb25zLmVycm9yICE9IG51bGwpIHtcbiAgICAgIHRocm93IHJlc29sdmVkT3B0aW9ucy5lcnJvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlc29sdmUgb3B0aW9uc1wiKTtcbiAgfVxuICBjb25zdCB1c2VyT3B0aW9ucyA9IHJlc29sdmVkT3B0aW9ucy51c2VyT3B0aW9ucztcbiAgXG5cbiAgbGV0IGNvbmZpZ0VudjogQ29uZmlnRW52IHwgdW5kZWZpbmVkO1xuICBsZXQgaG1ySGFuZGxlcjogeyByZXN0YXJ0OiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsOyBzZW5kSG1yVXBkYXRlOiAoZmlsZTogc3RyaW5nLCByb3V0ZXM/OiBzdHJpbmdbXSkgPT4gdm9pZCB9IHwgbnVsbCA9IG51bGw7XG4gIGxldCBpc1Byb2Nlc3NpbmdIbXIgPSBmYWxzZTsgLy8gUHJldmVudCByZWN1cnNpdmUgSE1SIHVwZGF0ZXNcbiAgbGV0IHJlc3RhcnRUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsOyAvLyBEZWJvdW5jZSB3b3JrZXIgcmVzdGFydHNcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IFwidml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOmRldi1zZXJ2ZXItY2xpZW50XCIsXG4gICAgYXBwbHk6IFwic2VydmVcIiwgLy8gT25seSBhcHBseSBpbiBkZXYgc2VydmVyIG1vZGVcbiAgICAvLyBObyBhcHBseVRvRW52aXJvbm1lbnQg4oCUIGhvdFVwZGF0ZSBuZWVkcyB0byBydW4gZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICAvLyB0aGF0IHNob3VsZCB3b3JrIHJlZ2FyZGxlc3Mgb2YgZW52aXJvbm1lbnQgZmlsdGVyaW5nXG4gICAgY29uZmlnKF9jb25maWcsIHZpdGVDb25maWdFbnYpIHtcbiAgICAgIGNvbmZpZ0VudiA9IHZpdGVDb25maWdFbnY7XG4gIFxuICAgIH0sXG4gICAgY29uZmlndXJlU2VydmVyKHNlcnZlcikgeyAgICAgIFxuICAgICAgLy8gTG9nIHRoYXQgcGx1Z2luIGlzIGJlaW5nIGNvbmZpZ3VyZWRcbiAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLmluZm8oYFt2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXJdIERldiBzZXJ2ZXIgcGx1Z2luIGNvbmZpZ3VyZWQgZm9yIGNsaWVudCBlbnZpcm9ubWVudGApO1xuICAgICAgXG4gICAgICAvLyBDb25maWd1cmUgdGhlIFJlYWN0IHNlcnZlciBmb3IgY2xpZW50IGVudmlyb25tZW50ICh3b3JrZXItYmFzZWQpXG4gICAgICAvLyBUaGlzIHVzZXMgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyZVJlYWN0U2VydmVyLmNsaWVudC5qcyBpbXBsZW1lbnRhdGlvblxuICAgICAgaG1ySGFuZGxlciA9IGNvbmZpZ3VyZVJlYWN0U2VydmVyKHtcbiAgICAgICAgc2VydmVyLFxuICAgICAgICBhdXRvRGlzY292ZXJlZEZpbGVzOiB7XG4gICAgICAgICAgcHJvcHNNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICBwYWdlTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgcm9vdE1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIGh0bWxNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICByb3V0ZU1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHVybE1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgd29ya2VyUGF0aHM6IHt9LFxuICAgICAgICAgIHNlcnZlckVudHJ5OiBudWxsLFxuICAgICAgICAgIGNsaWVudEVudHJ5OiB7fSxcbiAgICAgICAgICBjbGllbnRJbnB1dHM6IHt9LFxuICAgICAgICAgIHN0YXRpY0lucHV0czoge30sXG4gICAgICAgICAgc2VydmVySW5wdXRzOiB7fSxcbiAgICAgICAgICAvLyBzdGF0aWNNYW5pZmVzdCByZW1vdmVkIGZyb20gQXV0b0Rpc2NvdmVyZWRGaWxlc1xuICAgICAgICAgIHNlcnZlckFjdGlvbnM6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB1c2VyT3B0aW9ucyxcbiAgICAgICAgY29uZmlnRW52OiBjb25maWdFbnYhLFxuICAgICAgICBzZXJ2ZXJNYW5pZmVzdDoge30sIFxuICAgICAgICByZXNvbHZlZENvbmZpZzogc2VydmVyLmNvbmZpZyxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgaG90VXBkYXRlKGN0eDogYW55KSB7XG4gICAgICBjb25zdCB7IGZpbGUsIHNlcnZlciB9ID0gY3R4O1xuICAgICAgY29uc3QgZW52TmFtZSA9IGN0eC5lbnZpcm9ubWVudD8ubmFtZSA/PyAndW5rbm93bic7XG4gICAgICBcbiAgICAgIC8vIE9ubHkgcnVuIHdvcmtlciBpbnZhbGlkYXRpb24gZnJvbSB0aGUgY2xpZW50IGVudmlyb25tZW50IChvbmNlIHBlciBjaGFuZ2UpXG4gICAgICBpZiAoZW52TmFtZSAhPT0gJ2NsaWVudCcpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gUHJldmVudCByZWN1cnNpdmUgSE1SIHVwZGF0ZXNcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdIbXIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIHNlcnZlciBjb21wb25lbnQgZmlsZSBjaGFuZ2VzXG4gICAgICBjb25zdCBtb2R1bGVCYXNlID0gdXNlck9wdGlvbnMubW9kdWxlQmFzZSB8fCBcInNyY1wiO1xuICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSB1c2VyT3B0aW9ucy5wcm9qZWN0Um9vdCB8fCBzZXJ2ZXIuY29uZmlnLnJvb3Q7XG4gICAgICBcbiAgICAgIC8vIE5vcm1hbGl6ZSBwYXRocyBmb3IgY29tcGFyaXNvbiAoaGFuZGxlIGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlKVxuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGUgPSBmaWxlLnJlcGxhY2UocHJvamVjdFJvb3QsICcnKS5yZXBsYWNlKC9eXFwvKy8sICcnKTtcbiAgICAgIGNvbnN0IGlzU291cmNlRmlsZSA9IG5vcm1hbGl6ZWRGaWxlLnN0YXJ0c1dpdGgobW9kdWxlQmFzZSArICcvJykgJiYgXG4gICAgICAgIChmaWxlLmVuZHNXaXRoKCcudHN4JykgfHwgZmlsZS5lbmRzV2l0aCgnLnRzJykgfHwgZmlsZS5lbmRzV2l0aCgnLmpzeCcpIHx8IGZpbGUuZW5kc1dpdGgoJy5qcycpKTtcbiAgICAgIFxuICAgICAgLy8gU2tpcCBjbGllbnQgY29tcG9uZW50cyDigJQgbGV0IEB2aXRlanMvcGx1Z2luLXJlYWN0IGhhbmRsZSB0aGVtIHdpdGggRmFzdCBSZWZyZXNoXG4gICAgICBjb25zdCBpc0NsaWVudEZpbGUgPSBpc1NvdXJjZUZpbGUgJiYgKCgpID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBjb25zdCBoZWFkID0gcmVhZEZpbGVTeW5jKGZpbGUsICd1dGYtOCcpLnNsaWNlKDAsIDIwMCk7XG4gICAgICAgICAgcmV0dXJuIC9eXFxzKltcIidddXNlIGNsaWVudFtcIiddLy50ZXN0KGhlYWQuc3BsaXQoJ1xcbicpWzBdKTtcbiAgICAgICAgfSBjYXRjaCB7IHJldHVybiBmYWxzZTsgfVxuICAgICAgfSkoKTtcbiAgICAgIFxuICAgICAgY29uc3QgaXNTZXJ2ZXJGaWxlID0gaXNTb3VyY2VGaWxlICYmICFpc0NsaWVudEZpbGU7XG4gICAgICBcbiAgICAgIGlmIChpc1NlcnZlckZpbGUgJiYgaG1ySGFuZGxlcikge1xuICAgICAgICBpc1Byb2Nlc3NpbmdIbXIgPSB0cnVlO1xuICAgICAgICBcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5pbmZvKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBGaWxlIGNoYW5nZWQ6ICR7ZmlsZX0sIHNlbmRpbmcgSE1SIHVwZGF0ZS4uLmApO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIENSSVRJQ0FMOiBTZW5kIEhNUl9VUERBVEUgbWVzc2FnZSB0byB3b3JrZXIgdG8gaW52YWxpZGF0ZSBtb2R1bGVzXG4gICAgICAgICAgLy8gVGhpcyBjbGVhcnMgY29tcG9uZW50IGNhY2hlcywgYnV0IE5vZGUuanMncyBFUyBtb2R1bGUgY2FjaGUgcGVyc2lzdHNcbiAgICAgICAgICBobXJIYW5kbGVyLnNlbmRIbXJVcGRhdGUoZmlsZSk7XG4gICAgICAgICAgXG4gICAgICAgICAgLy8gTk9URTogVGhlIFdTIGV2ZW50IHRvIG5vdGlmeSB0aGUgY2xpZW50IGlzIHNlbnQgYnkgdGhlIGhvdFVwZGF0ZSBob29rXG4gICAgICAgICAgLy8gaW4gcGx1Z2luLnNlcnZlci50cyDigJQgZG9uJ3QgZHVwbGljYXRlIGl0IGhlcmUuXG4gICAgICAgICAgXG4gICAgICAgICAgLy8gQ1JJVElDQUw6IE5vZGUuanMgY2FjaGVzIEVTIG1vZHVsZXMsIHNvIHdlIG5lZWQgdG8gcmVzdGFydCB0aGUgd29ya2VyXG4gICAgICAgICAgLy8gdG8gY2xlYXIgdGhlIG1vZHVsZSBjYWNoZS4gRGVib3VuY2UgcmVzdGFydHMgdG8gcHJldmVudCByZWN1cnNpb24uXG4gICAgICAgICAgaWYgKGhtckhhbmRsZXIucmVzdGFydCkge1xuICAgICAgICAgICAgLy8gQ2xlYXIgYW55IHBlbmRpbmcgcmVzdGFydFxuICAgICAgICAgICAgaWYgKHJlc3RhcnRUaW1lb3V0KSB7XG4gICAgICAgICAgICAgIGNsZWFyVGltZW91dChyZXN0YXJ0VGltZW91dCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIERlYm91bmNlIHdvcmtlciByZXN0YXJ0IHRvIHByZXZlbnQgcmVjdXJzaW9uXG4gICAgICAgICAgICAvLyBXYWl0IDUwMG1zIGFmdGVyIHRoZSBsYXN0IGZpbGUgY2hhbmdlIGJlZm9yZSByZXN0YXJ0aW5nXG4gICAgICAgICAgICByZXN0YXJ0VGltZW91dCA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLmluZm8oYFt2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXJdIFJlc3RhcnRpbmcgd29ya2VyIHRvIGNsZWFyIE5vZGUuanMgbW9kdWxlIGNhY2hlLi4uYCk7XG4gICAgICAgICAgICAgICAgYXdhaXQgaG1ySGFuZGxlciEucmVzdGFydCEoKTtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5pbmZvKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBXb3JrZXIgcmVzdGFydGVkIHN1Y2Nlc3NmdWxseWApO1xuICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgICAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLmVycm9yKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBGYWlsZWQgdG8gcmVzdGFydCB3b3JrZXI6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgICAgIH0gZmluYWxseSB7XG4gICAgICAgICAgICAgICAgcmVzdGFydFRpbWVvdXQgPSBudWxsO1xuICAgICAgICAgICAgICAgIC8vIFJlc2V0IGZsYWcgYWZ0ZXIgcmVzdGFydCBjb21wbGV0ZXNcbiAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgIGlzUHJvY2Vzc2luZ0htciA9IGZhbHNlO1xuICAgICAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0sIDUwMCk7IC8vIDUwMG1zIGRlYm91bmNlXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIE5vIHJlc3RhcnQgZnVuY3Rpb24gYXZhaWxhYmxlIHlldCAtIHdvcmtlciBoYXNuJ3QgYmVlbiBjcmVhdGVkXG4gICAgICAgICAgICAvLyBUaGlzIGlzIGV4cGVjdGVkIGlmIGhvdFVwZGF0ZSBmaXJlcyBiZWZvcmUgdGhlIGZpcnN0IHJlcXVlc3RcbiAgICAgICAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLndhcm4oYFt2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXJdIFJlc3RhcnQgZnVuY3Rpb24gbm90IGF2YWlsYWJsZSB5ZXQgLSB3b3JrZXIgd2lsbCBiZSBjcmVhdGVkIG9uIG5leHQgcmVxdWVzdGApO1xuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgIGlzUHJvY2Vzc2luZ0htciA9IGZhbHNlO1xuICAgICAgICAgICAgfSwgMTAwKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuZXJyb3IoYFt2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXJdIEVycm9yIGhhbmRsaW5nIEhNUiB1cGRhdGU6ICR7ZXJyb3J9YCk7XG4gICAgICAgICAgaXNQcm9jZXNzaW5nSG1yID0gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgIH0gZWxzZSBpZiAoaXNTZXJ2ZXJGaWxlICYmICFobXJIYW5kbGVyKSB7XG4gICAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLndhcm4oYFt2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXJdIFNlcnZlciBmaWxlIGNoYW5nZWQgYnV0IEhNUiBoYW5kbGVyIG5vdCBhdmFpbGFibGUgeWV0OiAke2ZpbGV9YCk7XG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIERvbid0IHN1cHByZXNzIOKAlCBwbHVnaW4uc2VydmVyLnRzIGhvdFVwZGF0ZSBoYW5kbGVzIHBhZ2UgcmVsb2FkIHByZXZlbnRpb25cbiAgICB9LFxuICB9O1xufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFXYSxNQUFBLHdCQUFBLEdBQXlDLFNBQVMsK0JBQUEsQ0FBZ0MsT0FBUyxFQUFBO0FBQ3RHLEVBQUEsSUFBSSxXQUFXLElBQU0sRUFBQTtBQUNuQixJQUFNLE1BQUEsSUFBSSxNQUFNLHFCQUFxQixDQUFBO0FBQUE7QUFHdkMsRUFBQSxJQUFJLFFBQVEsT0FBUyxFQUFBO0FBR3JCLEVBQU0sTUFBQSxlQUFBLEdBQWtCLGVBQWUsT0FBTyxDQUFBO0FBQzlDLEVBQUksSUFBQSxlQUFBLENBQWdCLFNBQVMsT0FBUyxFQUFBO0FBQ3BDLElBQUksSUFBQSxl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
125
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLmNsaWVudC5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Rldi1zZXJ2ZXIvcGx1Z2luLmNsaWVudC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyByZWFkRmlsZVN5bmMgfSBmcm9tIFwibm9kZTpmc1wiO1xuaW1wb3J0IHR5cGUgeyBWaXRlUGx1Z2luRm4gfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGNvbmZpZ3VyZVJlYWN0U2VydmVyIH0gZnJvbSBcIi4vY29uZmlndXJlUmVhY3RTZXJ2ZXIuY2xpZW50LmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZU9wdGlvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgQ29uZmlnRW52IH0gZnJvbSBcInZpdGVcIjtcblxuXG4vKipcbiAqIERldiBzZXJ2ZXIgcGx1Z2luIGZvciBjbGllbnQgZW52aXJvbm1lbnQuXG4gKiBVc2VzIGNvbmZpZ3VyZVNlcnZlciBob29rIGZvciBwcm9wZXIgZGV2IHNlcnZlciBzZXR1cC5cbiAqL1xuZXhwb3J0IGNvbnN0IHZpdGVQbHVnaW5SZWFjdERldlNlcnZlcjogVml0ZVBsdWdpbkZuID0gZnVuY3Rpb24gX3ZpdGVQbHVnaW5SZWFjdFNlcnZlckRldkNsaWVudChvcHRpb25zKSB7XG4gIGlmIChvcHRpb25zID09IG51bGwpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJvcHRpb25zIGlzIHJlcXVpcmVkXCIpO1xuICB9XG5cbiAgaWYgKG9wdGlvbnMudmVyYm9zZSkge1xuICB9XG4gIFxuICBjb25zdCByZXNvbHZlZE9wdGlvbnMgPSByZXNvbHZlT3B0aW9ucyhvcHRpb25zKTtcbiAgaWYgKHJlc29sdmVkT3B0aW9ucy50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICBpZiAocmVzb2x2ZWRPcHRpb25zLmVycm9yICE9IG51bGwpIHtcbiAgICAgIHRocm93IHJlc29sdmVkT3B0aW9ucy5lcnJvcjtcbiAgICB9XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiRmFpbGVkIHRvIHJlc29sdmUgb3B0aW9uc1wiKTtcbiAgfVxuICBjb25zdCB1c2VyT3B0aW9ucyA9IHJlc29sdmVkT3B0aW9ucy51c2VyT3B0aW9ucztcbiAgXG5cbiAgbGV0IGNvbmZpZ0VudjogQ29uZmlnRW52IHwgdW5kZWZpbmVkO1xuICBsZXQgaG1ySGFuZGxlcjogeyByZXN0YXJ0OiAoKCkgPT4gUHJvbWlzZTx2b2lkPikgfCBudWxsOyBzZW5kSG1yVXBkYXRlOiAoZmlsZTogc3RyaW5nLCByb3V0ZXM/OiBzdHJpbmdbXSkgPT4gdm9pZCB9IHwgbnVsbCA9IG51bGw7XG4gIGxldCBpc1Byb2Nlc3NpbmdIbXIgPSBmYWxzZTsgLy8gUHJldmVudCByZWN1cnNpdmUgSE1SIHVwZGF0ZXNcbiAgbGV0IHJlc3RhcnRUaW1lb3V0OiBOb2RlSlMuVGltZW91dCB8IG51bGwgPSBudWxsOyAvLyBEZWJvdW5jZSB3b3JrZXIgcmVzdGFydHNcblxuICByZXR1cm4ge1xuICAgIG5hbWU6IFwidml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOmRldi1zZXJ2ZXItY2xpZW50XCIsXG4gICAgYXBwbHk6IFwic2VydmVcIiwgLy8gT25seSBhcHBseSBpbiBkZXYgc2VydmVyIG1vZGVcbiAgICAvLyBObyBhcHBseVRvRW52aXJvbm1lbnQg4oCUIGhvdFVwZGF0ZSBuZWVkcyB0byBydW4gZm9yIGFsbCBlbnZpcm9ubWVudHNcbiAgICAvLyB0aGF0IHNob3VsZCB3b3JrIHJlZ2FyZGxlc3Mgb2YgZW52aXJvbm1lbnQgZmlsdGVyaW5nXG4gICAgY29uZmlnKF9jb25maWcsIHZpdGVDb25maWdFbnYpIHtcbiAgICAgIGNvbmZpZ0VudiA9IHZpdGVDb25maWdFbnY7XG4gIFxuICAgIH0sXG4gICAgY29uZmlndXJlU2VydmVyKHNlcnZlcikgeyAgICAgIFxuICAgICAgLy8gTG9nIHRoYXQgcGx1Z2luIGlzIGJlaW5nIGNvbmZpZ3VyZWRcbiAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLmluZm8oYFt2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXJdIERldiBzZXJ2ZXIgcGx1Z2luIGNvbmZpZ3VyZWQgZm9yIGNsaWVudCBlbnZpcm9ubWVudGApO1xuICAgICAgXG4gICAgICAvLyBDb25maWd1cmUgdGhlIFJlYWN0IHNlcnZlciBmb3IgY2xpZW50IGVudmlyb25tZW50ICh3b3JrZXItYmFzZWQpXG4gICAgICAvLyBUaGlzIHVzZXMgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyZVJlYWN0U2VydmVyLmNsaWVudC5qcyBpbXBsZW1lbnRhdGlvblxuICAgICAgaG1ySGFuZGxlciA9IGNvbmZpZ3VyZVJlYWN0U2VydmVyKHtcbiAgICAgICAgc2VydmVyLFxuICAgICAgICBhdXRvRGlzY292ZXJlZEZpbGVzOiB7XG4gICAgICAgICAgcHJvcHNNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICBwYWdlTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgcm9vdE1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIGh0bWxNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICByb3V0ZU1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHVybE1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIGVycm9yczogW10sXG4gICAgICAgICAgd29ya2VyUGF0aHM6IHt9LFxuICAgICAgICAgIHNlcnZlckVudHJ5OiBudWxsLFxuICAgICAgICAgIGNsaWVudEVudHJ5OiB7fSxcbiAgICAgICAgICBjbGllbnRJbnB1dHM6IHt9LFxuICAgICAgICAgIHN0YXRpY0lucHV0czoge30sXG4gICAgICAgICAgc2VydmVySW5wdXRzOiB7fSxcbiAgICAgICAgICAvLyBzdGF0aWNNYW5pZmVzdCByZW1vdmVkIGZyb20gQXV0b0Rpc2NvdmVyZWRGaWxlc1xuICAgICAgICAgIHNlcnZlckFjdGlvbnM6IHt9LFxuICAgICAgICB9LFxuICAgICAgICB1c2VyT3B0aW9ucyxcbiAgICAgICAgY29uZmlnRW52OiBjb25maWdFbnYhLFxuICAgICAgICBzZXJ2ZXJNYW5pZmVzdDoge30sIFxuICAgICAgICByZXNvbHZlZENvbmZpZzogc2VydmVyLmNvbmZpZyxcbiAgICAgIH0pO1xuICAgIH0sXG4gICAgaG90VXBkYXRlKGN0eDogYW55KSB7XG4gICAgICBjb25zdCB7IGZpbGUsIHNlcnZlciB9ID0gY3R4O1xuICAgICAgY29uc3QgZW52TmFtZSA9IGN0eC5lbnZpcm9ubWVudD8ubmFtZSA/PyAndW5rbm93bic7XG4gICAgICBcbiAgICAgIC8vIE9ubHkgcnVuIHdvcmtlciBpbnZhbGlkYXRpb24gZnJvbSB0aGUgY2xpZW50IGVudmlyb25tZW50IChvbmNlIHBlciBjaGFuZ2UpXG4gICAgICBpZiAoZW52TmFtZSAhPT0gJ2NsaWVudCcpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gUHJldmVudCByZWN1cnNpdmUgSE1SIHVwZGF0ZXNcbiAgICAgIGlmIChpc1Byb2Nlc3NpbmdIbXIpIHtcbiAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gSGFuZGxlIHNlcnZlciBjb21wb25lbnQgZmlsZSBjaGFuZ2VzXG4gICAgICBjb25zdCBtb2R1bGVCYXNlID0gdXNlck9wdGlvbnMubW9kdWxlQmFzZSB8fCBcInNyY1wiO1xuICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSB1c2VyT3B0aW9ucy5wcm9qZWN0Um9vdCB8fCBzZXJ2ZXIuY29uZmlnLnJvb3Q7XG4gICAgICBcbiAgICAgIC8vIE5vcm1hbGl6ZSBwYXRocyBmb3IgY29tcGFyaXNvbiAoaGFuZGxlIGJvdGggYWJzb2x1dGUgYW5kIHJlbGF0aXZlKVxuICAgICAgY29uc3Qgbm9ybWFsaXplZEZpbGUgPSBmaWxlLnJlcGxhY2UocHJvamVjdFJvb3QsICcnKS5yZXBsYWNlKC9eXFwvKy8sICcnKTtcbiAgICAgIGNvbnN0IGlzU291cmNlRmlsZSA9IG5vcm1hbGl6ZWRGaWxlLnN0YXJ0c1dpdGgobW9kdWxlQmFzZSArICcvJykgJiYgXG4gICAgICAgIChmaWxlLmVuZHNXaXRoKCcudHN4JykgfHwgZmlsZS5lbmRzV2l0aCgnLnRzJykgfHwgZmlsZS5lbmRzV2l0aCgnLmpzeCcpIHx8IGZpbGUuZW5kc1dpdGgoJy5qcycpKTtcbiAgICAgIFxuICAgICAgLy8gU2tpcCBjbGllbnQgY29tcG9uZW50cyDigJQgbGV0IEB2aXRlanMvcGx1Z2luLXJlYWN0IGhhbmRsZSB0aGVtIHdpdGggRmFzdCBSZWZyZXNoXG4gICAgICBjb25zdCBpc0NsaWVudEZpbGUgPSBpc1NvdXJjZUZpbGUgJiYgKCgpID0+IHtcbiAgICAgICAgLy8gQ2hlY2sgZmlsZW5hbWUgcGF0dGVybiAoLmNsaWVudC50c3gsIGV0Yy4pIOKAlCBtYXRjaGVzIGlzQ2xpZW50Q29tcG9uZW50QnlOYW1lXG4gICAgICAgIGlmICgvXFwuY2xpZW50XFwuKGpzfHRzfGpzeHx0c3gpJC8udGVzdChmaWxlKSkgcmV0dXJuIHRydWU7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgaGVhZCA9IHJlYWRGaWxlU3luYyhmaWxlLCAndXRmLTgnKS5zbGljZSgwLCAyMDApO1xuICAgICAgICAgIHJldHVybiAvXlxccypbXCInXXVzZSBjbGllbnRbXCInXS8udGVzdChoZWFkLnNwbGl0KCdcXG4nKVswXSk7XG4gICAgICAgIH0gY2F0Y2ggeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgIH0pKCk7XG4gICAgICBcbiAgICAgIGNvbnN0IGlzU2VydmVyRmlsZSA9IGlzU291cmNlRmlsZSAmJiAhaXNDbGllbnRGaWxlO1xuICAgICAgXG4gICAgICBpZiAoaXNTZXJ2ZXJGaWxlICYmIGhtckhhbmRsZXIpIHtcbiAgICAgICAgaXNQcm9jZXNzaW5nSG1yID0gdHJ1ZTtcbiAgICAgICAgXG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRmlsZSBjaGFuZ2VkOiAke2ZpbGV9LCBzZW5kaW5nIEhNUiB1cGRhdGUuLi5gKTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBDUklUSUNBTDogU2VuZCBITVJfVVBEQVRFIG1lc3NhZ2UgdG8gd29ya2VyIHRvIGludmFsaWRhdGUgbW9kdWxlc1xuICAgICAgICAgIC8vIFRoaXMgY2xlYXJzIGNvbXBvbmVudCBjYWNoZXMsIGJ1dCBOb2RlLmpzJ3MgRVMgbW9kdWxlIGNhY2hlIHBlcnNpc3RzXG4gICAgICAgICAgaG1ySGFuZGxlci5zZW5kSG1yVXBkYXRlKGZpbGUpO1xuICAgICAgICAgIFxuICAgICAgICAgIC8vIE5PVEU6IFRoZSBXUyBldmVudCB0byBub3RpZnkgdGhlIGNsaWVudCBpcyBzZW50IGJ5IHRoZSBob3RVcGRhdGUgaG9va1xuICAgICAgICAgIC8vIGluIHBsdWdpbi5zZXJ2ZXIudHMg4oCUIGRvbid0IGR1cGxpY2F0ZSBpdCBoZXJlLlxuICAgICAgICAgIFxuICAgICAgICAgIC8vIENSSVRJQ0FMOiBOb2RlLmpzIGNhY2hlcyBFUyBtb2R1bGVzLCBzbyB3ZSBuZWVkIHRvIHJlc3RhcnQgdGhlIHdvcmtlclxuICAgICAgICAgIC8vIHRvIGNsZWFyIHRoZSBtb2R1bGUgY2FjaGUuIERlYm91bmNlIHJlc3RhcnRzIHRvIHByZXZlbnQgcmVjdXJzaW9uLlxuICAgICAgICAgIGlmIChobXJIYW5kbGVyLnJlc3RhcnQpIHtcbiAgICAgICAgICAgIC8vIENsZWFyIGFueSBwZW5kaW5nIHJlc3RhcnRcbiAgICAgICAgICAgIGlmIChyZXN0YXJ0VGltZW91dCkge1xuICAgICAgICAgICAgICBjbGVhclRpbWVvdXQocmVzdGFydFRpbWVvdXQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBEZWJvdW5jZSB3b3JrZXIgcmVzdGFydCB0byBwcmV2ZW50IHJlY3Vyc2lvblxuICAgICAgICAgICAgLy8gV2FpdCA1MDBtcyBhZnRlciB0aGUgbGFzdCBmaWxlIGNoYW5nZSBiZWZvcmUgcmVzdGFydGluZ1xuICAgICAgICAgICAgcmVzdGFydFRpbWVvdXQgPSBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5pbmZvKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBSZXN0YXJ0aW5nIHdvcmtlciB0byBjbGVhciBOb2RlLmpzIG1vZHVsZSBjYWNoZS4uLmApO1xuICAgICAgICAgICAgICAgIGF3YWl0IGhtckhhbmRsZXIhLnJlc3RhcnQhKCk7XG4gICAgICAgICAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gV29ya2VyIHJlc3RhcnRlZCBzdWNjZXNzZnVsbHlgKTtcbiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5lcnJvcihgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRmFpbGVkIHRvIHJlc3RhcnQgd29ya2VyOiAke2Vycm9yfWApO1xuICAgICAgICAgICAgICB9IGZpbmFsbHkge1xuICAgICAgICAgICAgICAgIHJlc3RhcnRUaW1lb3V0ID0gbnVsbDtcbiAgICAgICAgICAgICAgICAvLyBSZXNldCBmbGFnIGFmdGVyIHJlc3RhcnQgY29tcGxldGVzXG4gICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICAgICAgICBpc1Byb2Nlc3NpbmdIbXIgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB9LCAxMDApO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9LCA1MDApOyAvLyA1MDBtcyBkZWJvdW5jZVxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAvLyBObyByZXN0YXJ0IGZ1bmN0aW9uIGF2YWlsYWJsZSB5ZXQgLSB3b3JrZXIgaGFzbid0IGJlZW4gY3JlYXRlZFxuICAgICAgICAgICAgLy8gVGhpcyBpcyBleHBlY3RlZCBpZiBob3RVcGRhdGUgZmlyZXMgYmVmb3JlIHRoZSBmaXJzdCByZXF1ZXN0XG4gICAgICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci53YXJuKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBSZXN0YXJ0IGZ1bmN0aW9uIG5vdCBhdmFpbGFibGUgeWV0IC0gd29ya2VyIHdpbGwgYmUgY3JlYXRlZCBvbiBuZXh0IHJlcXVlc3RgKTtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgICAgICBpc1Byb2Nlc3NpbmdIbXIgPSBmYWxzZTtcbiAgICAgICAgICAgIH0sIDEwMCk7XG4gICAgICAgICAgfVxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLmVycm9yKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBFcnJvciBoYW5kbGluZyBITVIgdXBkYXRlOiAke2Vycm9yfWApO1xuICAgICAgICAgIGlzUHJvY2Vzc2luZ0htciA9IGZhbHNlO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKGlzU2VydmVyRmlsZSAmJiAhaG1ySGFuZGxlcikge1xuICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci53YXJuKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBTZXJ2ZXIgZmlsZSBjaGFuZ2VkIGJ1dCBITVIgaGFuZGxlciBub3QgYXZhaWxhYmxlIHlldDogJHtmaWxlfWApO1xuICAgICAgfVxuICAgICAgXG4gICAgICAvLyBEb24ndCBzdXBwcmVzcyDigJQgcGx1Z2luLnNlcnZlci50cyBob3RVcGRhdGUgaGFuZGxlcyBwYWdlIHJlbG9hZCBwcmV2ZW50aW9uXG4gICAgfSxcbiAgfTtcbn07XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7O0FBV2EsTUFBQSx3QkFBQSxHQUF5QyxTQUFTLCtCQUFBLENBQWdDLE9BQVMsRUFBQTtBQUN0RyxFQUFBLElBQUksV0FBVyxJQUFNLEVBQUE7QUFDbkIsSUFBTSxNQUFBLElBQUksTUFBTSxxQkFBcUIsQ0FBQTtBQUFBO0FBR3ZDLEVBQUEsSUFBSSxRQUFRLE9BQVMsRUFBQTtBQUdyQixFQUFNLE1BQUEsZUFBQSxHQUFrQixlQUFlLE9BQU8sQ0FBQTtBQUM5QyxFQUFJLElBQUEsZUFBQSxDQUFnQixTQUFTLE9BQVMsRUFBQTtBQUNwQyxJQUFJLElBQUEsZUFBQSxDQUFnQixTQUFTLElBQU0sRUFBQTtBQUNqQyxNQUFBLE1BQU0sZUFBZ0IsQ0FBQSxLQUFBO0FBQUE7QUFFeEIsSUFBTSxNQUFBLElBQUksTUFBTSwyQkFBMkIsQ0FBQTtBQUFBO0FBRTdDLEVBQUEsTUFBTSxjQUFjLGVBQWdCLENBQUEsV0FBQTtBQUdwQyxFQUFJLElBQUEsU0FBQTtBQUNKLEVBQUEsSUFBSSxVQUF5SCxHQUFBLElBQUE7QUFDN0gsRUFBQSxJQUFJLGVBQWtCLEdBQUEsS0FBQTtBQUN0QixFQUFBLElBQUksY0FBd0MsR0FBQSxJQUFBO0FBRTVDLEVBQU8sT0FBQTtBQUFBLElBQ0wsSUFBTSxFQUFBLDRDQUFBO0FBQUEsSUFDTixLQUFPLEVBQUEsT0FBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLElBR1AsTUFBQSxDQUFPLFNBQVMsYUFBZSxFQUFBO0FBQzdCLE1BQVksU0FBQSxHQUFBLGFBQUE7QUFBQSxLQUVkO0FBQUEsSUFDQSxnQkFBZ0IsTUFBUSxFQUFBO0FBRXRCLE1BQU8sTUFBQSxDQUFBLE1BQUEsQ0FBTyxNQUFPLENBQUEsSUFBQSxDQUFLLENBQWdGLDhFQUFBLENBQUEsQ0FBQTtBQUkxRyxNQUFBLFVBQUEsR0FBYSxvQkFBcUIsQ0FBQTtBQUFBLFFBQ2hDLE1BQUE7QUFBQSxRQUNBLG1CQUFxQixFQUFBO0FBQUEsVUFDbkIsUUFBQSxzQkFBYyxHQUFJLEVBQUE7QUFBQSxVQUNsQixPQUFBLHNCQUFhLEdBQUksRUFBQTtBQUFBLFVBQ2pCLE9BQUEsc0JBQWEsR0FBSSxFQUFBO0FBQUEsVUFDakIsT0FBQSxzQkFBYSxHQUFJLEVBQUE7QUFBQSxVQUNqQixRQUFBLHNCQUFjLEdBQUksRUFBQTtBQUFBLFVBQ2xCLE1BQUEsc0JBQVksR0FBSSxFQUFBO0FBQUEsVUFDaEIsUUFBUSxFQUFDO0FBQUEsVUFDVCxhQUFhLEVBQUM7QUFBQSxVQUNkLFdBQWEsRUFBQSxJQUFBO0FBQUEsVUFDYixhQUFhLEVBQUM7QUFBQSxVQUNkLGNBQWMsRUFBQztBQUFBLFVBQ2YsY0FBYyxFQUFDO0FBQUEsVUFDZixjQUFjLEVBQUM7QUFBQTtBQUFBLFVBRWYsZUFBZTtBQUFDLFNBQ2xCO0FBQUEsUUFDQSxXQUFBO0FBQUEsUUFDQSxTQUFBO0FBQUEsUUFDQSxnQkFBZ0IsRUFBQztBQUFBLFFBQ2pCLGdCQUFnQixNQUFPLENBQUE7QUFBQSxPQUN4QixDQUFBO0FBQUEsS0FDSDtBQUFBLElBQ0EsVUFBVSxHQUFVLEVBQUE7QUFDbEIsTUFBTSxNQUFBLEVBQUUsSUFBTSxFQUFBLE1BQUEsRUFBVyxHQUFBLEdBQUE7QUFDekIsTUFBTSxNQUFBLE9BQUEsR0FBVSxHQUFJLENBQUEsV0FBQSxFQUFhLElBQVEsSUFBQSxTQUFBO0FBR3pDLE1BQUEsSUFBSSxZQUFZLFFBQVUsRUFBQTtBQUcxQixNQUFBLElBQUksZUFBaUIsRUFBQTtBQUNuQixRQUFPLE9BQUEsTUFBQTtBQUFBO0FBSVQsTUFBTSxNQUFBLFVBQUEsR0FBYSxZQUFZLFVBQWMsSUFBQSxLQUFBO0FBQzdDLE1BQUEsTUFBTSxXQUFjLEdBQUEsV0FBQSxDQUFZLFdBQWUsSUFBQSxNQUFBLENBQU8sTUFBTyxDQUFBLElBQUE7QUFHN0QsTUFBTSxNQUFBLGNBQUEsR0FBaUIsS0FBSyxPQUFRLENBQUEsV0FBQSxFQUFhLEVBQUUsQ0FBRSxDQUFBLE9BQUEsQ0FBUSxRQUFRLEVBQUUsQ0FBQTtBQUN2RSxNQUFNLE1BQUEsWUFBQSxHQUFlLGVBQWUsVUFBVyxDQUFBLFVBQUEsR0FBYSxHQUFHLENBQzVELEtBQUEsSUFBQSxDQUFLLFNBQVMsTUFBTSxDQUFBLElBQUssS0FBSyxRQUFTLENBQUEsS0FBSyxLQUFLLElBQUssQ0FBQSxRQUFBLENBQVMsTUFBTSxDQUFLLElBQUEsSUFBQSxDQUFLLFNBQVMsS0FBSyxDQUFBLENBQUE7QUFHaEcsTUFBTSxNQUFBLFlBQUEsR0FBZSxpQkFBaUIsTUFBTTtBQUUxQyxRQUFBLElBQUksNEJBQTZCLENBQUEsSUFBQSxDQUFLLElBQUksQ0FBQSxFQUFVLE9BQUEsSUFBQTtBQUNwRCxRQUFJLElBQUE7QUFDRixVQUFBLE1BQU0sT0FBTyxZQUFhLENBQUEsSUFBQSxFQUFNLE9BQU8sQ0FBRSxDQUFBLEtBQUEsQ0FBTSxHQUFHLEdBQUcsQ0FBQTtBQUNyRCxVQUFBLE9BQU8seUJBQXlCLElBQUssQ0FBQSxJQUFBLENBQUssTUFBTSxJQUFJLENBQUEsQ0FBRSxDQUFDLENBQUMsQ0FBQTtBQUFBLFNBQ2xELENBQUEsTUFBQTtBQUFFLFVBQU8sT0FBQSxLQUFBO0FBQUE7QUFBTyxPQUN2QixHQUFBO0FBRUgsTUFBTSxNQUFBLFlBQUEsR0FBZSxnQkFBZ0IsQ0FBQyxZQUFBO0FBRXRDLE1BQUEsSUFBSSxnQkFBZ0IsVUFBWSxFQUFBO0FBQzlCLFFBQWtCLGVBQUEsR0FBQSxJQUFBO0FBRWxCLFFBQUksSUFBQTtBQUNGLFVBQUEsTUFBQSxDQUFPLE1BQU8sQ0FBQSxNQUFBLENBQU8sSUFBSyxDQUFBLENBQUEseUNBQUEsRUFBNEMsSUFBSSxDQUF5Qix1QkFBQSxDQUFBLENBQUE7QUFJbkcsVUFBQSxVQUFBLENBQVcsY0FBYyxJQUFJLENBQUE7QUFPN0IsVUFBQSxJQUFJLFdBQVcsT0FBUyxFQUFBO0FBRXRCLFlBQUEsSUFBSSxjQUFnQixFQUFBO0FBQ2xCLGNBQUEsWUFBQSxDQUFhLGNBQWMsQ0FBQTtBQUFBO0FBSzdCLFlBQUEsY0FBQSxHQUFpQixXQUFXLFlBQVk7QUFDdEMsY0FBSSxJQUFBO0FBQ0YsZ0JBQU8sTUFBQSxDQUFBLE1BQUEsQ0FBTyxNQUFPLENBQUEsSUFBQSxDQUFLLENBQStFLDZFQUFBLENBQUEsQ0FBQTtBQUN6RyxnQkFBQSxNQUFNLFdBQVksT0FBUyxFQUFBO0FBQzNCLGdCQUFPLE1BQUEsQ0FBQSxNQUFBLENBQU8sTUFBTyxDQUFBLElBQUEsQ0FBSyxDQUEwRCx3REFBQSxDQUFBLENBQUE7QUFBQSx1QkFDN0UsS0FBTyxFQUFBO0FBQ2QsZ0JBQUEsTUFBQSxDQUFPLE1BQU8sQ0FBQSxNQUFBLENBQU8sS0FBTSxDQUFBLENBQUEscURBQUEsRUFBd0QsS0FBSyxDQUFFLENBQUEsQ0FBQTtBQUFBLGVBQzFGLFNBQUE7QUFDQSxnQkFBaUIsY0FBQSxHQUFBLElBQUE7QUFFakIsZ0JBQUEsVUFBQSxDQUFXLE1BQU07QUFDZixrQkFBa0IsZUFBQSxHQUFBLEtBQUE7QUFBQSxtQkFDakIsR0FBRyxDQUFBO0FBQUE7QUFDUixlQUNDLEdBQUcsQ0FBQTtBQUFBLFdBQ0QsTUFBQTtBQUdMLFlBQU8sTUFBQSxDQUFBLE1BQUEsQ0FBTyxNQUFPLENBQUEsSUFBQSxDQUFLLENBQXdHLHNHQUFBLENBQUEsQ0FBQTtBQUNsSSxZQUFBLFVBQUEsQ0FBVyxNQUFNO0FBQ2YsY0FBa0IsZUFBQSxHQUFBLEtBQUE7QUFBQSxlQUNqQixHQUFHLENBQUE7QUFBQTtBQUNSLGlCQUNPLEtBQU8sRUFBQTtBQUNkLFVBQUEsTUFBQSxDQUFPLE1BQU8sQ0FBQSxNQUFBLENBQU8sS0FBTSxDQUFBLENBQUEsc0RBQUEsRUFBeUQsS0FBSyxDQUFFLENBQUEsQ0FBQTtBQUMzRixVQUFrQixlQUFBLEdBQUEsS0FBQTtBQUFBO0FBQ3BCLE9BQ0YsTUFBQSxJQUFXLFlBQWdCLElBQUEsQ0FBQyxVQUFZLEVBQUE7QUFDdEMsUUFBQSxNQUFBLENBQU8sTUFBTyxDQUFBLE1BQUEsQ0FBTyxJQUFLLENBQUEsQ0FBQSxrRkFBQSxFQUFxRixJQUFJLENBQUUsQ0FBQSxDQUFBO0FBQUE7QUFDdkg7QUFHRixHQUNGO0FBQ0Y7Ozs7In0=
@@ -1 +1 @@
1
- {"version":3,"file":"plugin.server.d.ts","sourceRoot":"","sources":["../../../plugin/dev-server/plugin.server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAGlD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAA4C,SAAS,mBAAmB,KAAG,MAAM,EA6LrH,CAAC"}
1
+ {"version":3,"file":"plugin.server.d.ts","sourceRoot":"","sources":["../../../plugin/dev-server/plugin.server.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AAG1D,OAAO,KAAK,EAAE,MAAM,EAAiB,MAAM,MAAM,CAAC;AAGlD;;;GAGG;AACH,eAAO,MAAM,wBAAwB,GAA4C,SAAS,mBAAmB,KAAG,MAAM,EA8IrH,CAAC"}
@@ -35,6 +35,7 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevServer(option
35
35
  if (!isSourceFile) return;
36
36
  if (envName === "client") {
37
37
  const isClient = (file.endsWith(".tsx") || file.endsWith(".ts") || file.endsWith(".jsx") || file.endsWith(".js")) && (() => {
38
+ if (/\.client\.(js|ts|jsx|tsx)$/.test(file)) return true;
38
39
  try {
39
40
  const head = readFileSync(file, "utf-8").slice(0, 200);
40
41
  return /^\s*["']use client["']/.test(head.split("\n")[0]);
@@ -60,41 +61,6 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevServer(option
60
61
  }
61
62
  }
62
63
  return [];
63
- },
64
- handleHotUpdate({ file, server }) {
65
- const moduleBase = userOptions.moduleBase || "src";
66
- const projectRoot = userOptions.projectRoot || server.config.root;
67
- const normalizedFile = file.replace(projectRoot, "").replace(/^\/+/, "");
68
- const isSourceFile = normalizedFile.startsWith(moduleBase + "/") && (file.endsWith(".tsx") || file.endsWith(".ts") || file.endsWith(".jsx") || file.endsWith(".js"));
69
- const isClientFile = isSourceFile && (() => {
70
- try {
71
- const head = readFileSync(file, "utf-8").slice(0, 200);
72
- return /^\s*["']use client["']/.test(head.split("\n")[0]);
73
- } catch {
74
- return false;
75
- }
76
- })();
77
- if (isSourceFile && !isClientFile) {
78
- server.config.logger.info(`[vite-plugin-react-server] File changed (RSC refetch): ${normalizedFile}`);
79
- server.ws.send({
80
- type: "custom",
81
- event: "vite-plugin-react-server:server-component-update",
82
- data: {
83
- file: normalizedFile,
84
- path: file
85
- }
86
- });
87
- const mod = server.environments["server"]?.moduleGraph?.getModulesByFile(file);
88
- if (mod) {
89
- for (const m of mod) {
90
- server.environments["server"]?.moduleGraph?.invalidateModule(m);
91
- }
92
- }
93
- return [];
94
- }
95
- if (isClientFile) {
96
- return [];
97
- }
98
64
  }
99
65
  };
100
66
  const serverPlugin = {
@@ -155,4 +121,4 @@ const vitePluginReactDevServer = function _vitePluginReactServerDevServer(option
155
121
  };
156
122
 
157
123
  export { vitePluginReactDevServer };
158
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLnNlcnZlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Rldi1zZXJ2ZXIvcGx1Z2luLnNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0cmVhbVBsdWdpbk9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGNvbmZpZ3VyZVJlYWN0U2VydmVyIH0gZnJvbSBcIi4vY29uZmlndXJlUmVhY3RTZXJ2ZXIuc2VydmVyLmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZU9wdGlvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgUGx1Z2luLCBWaXRlRGV2U2VydmVyIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5cbi8qKlxuICogRGV2IHNlcnZlciBwbHVnaW4gZm9yIHNlcnZlciBlbnZpcm9ubWVudC5cbiAqIFJldHVybnMgdHdvIHBsdWdpbnM6IG9uZSBmb3IgSE1SIGhhbmRsaW5nIChhbGwgZW52aXJvbm1lbnRzKSBhbmQgb25lIGZvciBzZXJ2ZXIgY29uZmlnLlxuICovXG5leHBvcnQgY29uc3Qgdml0ZVBsdWdpblJlYWN0RGV2U2VydmVyID0gZnVuY3Rpb24gX3ZpdGVQbHVnaW5SZWFjdFNlcnZlckRldlNlcnZlcihvcHRpb25zOiBTdHJlYW1QbHVnaW5PcHRpb25zKTogUGx1Z2luW10ge1xuICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwib3B0aW9ucyBpcyByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkT3B0aW9ucyA9IHJlc29sdmVPcHRpb25zKG9wdGlvbnMpO1xuICBpZiAocmVzb2x2ZWRPcHRpb25zLnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgIGlmIChyZXNvbHZlZE9wdGlvbnMuZXJyb3IgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgcmVzb2x2ZWRPcHRpb25zLmVycm9yO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVzb2x2ZSBvcHRpb25zXCIpO1xuICB9XG4gIGNvbnN0IHVzZXJPcHRpb25zID0gcmVzb2x2ZWRPcHRpb25zLnVzZXJPcHRpb25zO1xuXG4gIC8vIFNlcGFyYXRlIHBsdWdpbiBmb3IgSE1SIGhhbmRsaW5nIChtdXN0IGFwcGx5IHRvIGFsbCBlbnZpcm9ubWVudHMpXG4gIGNvbnN0IGhtclBsdWdpbiA9IHtcbiAgICBuYW1lOiBcInZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcjpzZXJ2ZXItaG1yXCIsXG4gICAgYXBwbHk6IFwic2VydmVcIiBhcyBjb25zdCxcbiAgICAvLyBTZXJ2ZXItbGV2ZWwgaGFuZGxlSG90VXBkYXRlIOKAlCBzZW5kcyBjdXN0b20gV1MgZXZlbnQgdG8gY2xpZW50XG4gICAgLy8gVml0ZSA2IEVudmlyb25tZW50IEFQSTogaG90VXBkYXRlIHJ1bnMgcGVyLWVudmlyb25tZW50LlxuICAgIC8vIFByZXZlbnQgc2VydmVyL3NzciBlbnZpcm9ubWVudHMgZnJvbSB0cmlnZ2VyaW5nIHBhZ2UgcmVsb2FkIGZvciBjbGllbnQgY29tcG9uZW50cy5cbiAgICBob3RVcGRhdGUoY3R4OiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgZmlsZSwgc2VydmVyIH0gPSBjdHg7XG4gICAgICBjb25zdCBlbnZOYW1lID0gY3R4LmVudmlyb25tZW50Py5uYW1lID8/ICd1bmtub3duJztcbiAgICAgIFxuICAgICAgY29uc3QgbW9kdWxlQmFzZSA9IHVzZXJPcHRpb25zLm1vZHVsZUJhc2UgfHwgXCJzcmNcIjtcbiAgICAgIGNvbnN0IHByb2plY3RSb290ID0gdXNlck9wdGlvbnMucHJvamVjdFJvb3QgfHwgc2VydmVyPy5jb25maWc/LnJvb3QgfHwgJyc7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZShwcm9qZWN0Um9vdCwgJycpLnJlcGxhY2UoL15cXC8rLywgJycpO1xuICAgICAgY29uc3QgaXNTb3VyY2VGaWxlID0gbm9ybWFsaXplZEZpbGUuc3RhcnRzV2l0aChtb2R1bGVCYXNlICsgJy8nKTtcbiAgICAgIFxuICAgICAgaWYgKCFpc1NvdXJjZUZpbGUpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gQ2xpZW50IGVudmlyb25tZW50OiBsZXQgVml0ZS9Adml0ZWpzL3BsdWdpbi1yZWFjdCBoYW5kbGUgaXRcbiAgICAgIGlmIChlbnZOYW1lID09PSAnY2xpZW50Jykge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgY2xpZW50IGNvbXBvbmVudCDigJQgbGV0IEZhc3QgUmVmcmVzaCBoYW5kbGUgaXRcbiAgICAgICAgY29uc3QgaXNDbGllbnQgPSAoZmlsZS5lbmRzV2l0aCgnLnRzeCcpIHx8IGZpbGUuZW5kc1dpdGgoJy50cycpIHx8IGZpbGUuZW5kc1dpdGgoJy5qc3gnKSB8fCBmaWxlLmVuZHNXaXRoKCcuanMnKSkgJiYgKCgpID0+IHtcbiAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgY29uc3QgaGVhZCA9IHJlYWRGaWxlU3luYyhmaWxlLCAndXRmLTgnKS5zbGljZSgwLCAyMDApO1xuICAgICAgICAgICAgcmV0dXJuIC9eXFxzKltcIidddXNlIGNsaWVudFtcIiddLy50ZXN0KGhlYWQuc3BsaXQoJ1xcbicpWzBdKTtcbiAgICAgICAgICB9IGNhdGNoIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICAgIH0pKCk7XG4gICAgICAgIFxuICAgICAgICBpZiAoaXNDbGllbnQpIHJldHVybjsgLy8gTGV0IEZhc3QgUmVmcmVzaCBoYW5kbGUgY2xpZW50IGNvbXBvbmVudHNcbiAgICAgICAgXG4gICAgICAgIC8vIFNlcnZlciBjb21wb25lbnQgY2hhbmdlZCDigJQgc2VuZCBSU0MgcmVmZXRjaCBldmVudCB0byBjbGllbnRcbiAgICAgICAgLy8gT25seSBkbyB0aGlzIG9uY2UgKGZyb20gY2xpZW50IGVudikgdG8gYXZvaWQgZHVwbGljYXRlIGV2ZW50c1xuICAgICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5pbmZvKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBGaWxlIGNoYW5nZWQgKFJTQyByZWZldGNoKTogJHtub3JtYWxpemVkRmlsZX1gKTtcbiAgICAgICAgc2VydmVyLndzLnNlbmQoe1xuICAgICAgICAgIHR5cGU6ICdjdXN0b20nLFxuICAgICAgICAgIGV2ZW50OiAndml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOnNlcnZlci1jb21wb25lbnQtdXBkYXRlJyxcbiAgICAgICAgICBkYXRhOiB7IGZpbGU6IG5vcm1hbGl6ZWRGaWxlLCBwYXRoOiBmaWxlIH0sXG4gICAgICAgIH0pO1xuICAgICAgICBcbiAgICAgICAgcmV0dXJuIFtdOyAvLyBEb24ndCB0cmlnZ2VyIGNsaWVudC1zaWRlIHBhZ2UgcmVsb2FkXG4gICAgICB9XG4gICAgICBcbiAgICAgIC8vIFNlcnZlci9TU1IgZW52aXJvbm1lbnRzOiBzdXBwcmVzcyBwYWdlIHJlbG9hZCBmb3IgYWxsIHNvdXJjZSBmaWxlc1xuICAgICAgLy8gU2VydmVyIGNvbXBvbmVudHMgYXJlIGhhbmRsZWQgYnkgdGhlIFJTQyByZWZldGNoIGV2ZW50IHNlbnQgYWJvdmVcbiAgICAgIC8vIEludmFsaWRhdGUgdGhlIHNlcnZlciBtb2R1bGUgc28gbmV4dCBSU0MgcmVxdWVzdCBnZXRzIGZyZXNoIGNvbnRlbnRcbiAgICAgIGlmIChlbnZOYW1lID09PSAnc2VydmVyJykge1xuICAgICAgICBjb25zdCBtb2QgPSBjdHguZW52aXJvbm1lbnQ/Lm1vZHVsZUdyYXBoPy5nZXRNb2R1bGVzQnlGaWxlKGZpbGUpO1xuICAgICAgICBpZiAobW9kKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1vZCkge1xuICAgICAgICAgICAgY3R4LmVudmlyb25tZW50Lm1vZHVsZUdyYXBoLmludmFsaWRhdGVNb2R1bGUobSk7XG4gICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gW107XG4gICAgfSxcbiAgICBoYW5kbGVIb3RVcGRhdGUoeyBmaWxlLCBzZXJ2ZXIgfTogeyBmaWxlOiBzdHJpbmc7IHNlcnZlcjogVml0ZURldlNlcnZlciB9KSB7XG4gICAgICBjb25zdCBtb2R1bGVCYXNlID0gdXNlck9wdGlvbnMubW9kdWxlQmFzZSB8fCBcInNyY1wiO1xuICAgICAgY29uc3QgcHJvamVjdFJvb3QgPSB1c2VyT3B0aW9ucy5wcm9qZWN0Um9vdCB8fCBzZXJ2ZXIuY29uZmlnLnJvb3Q7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZShwcm9qZWN0Um9vdCwgJycpLnJlcGxhY2UoL15cXC8rLywgJycpO1xuICAgICAgY29uc3QgaXNTb3VyY2VGaWxlID0gbm9ybWFsaXplZEZpbGUuc3RhcnRzV2l0aChtb2R1bGVCYXNlICsgJy8nKSAmJiBcbiAgICAgICAgKGZpbGUuZW5kc1dpdGgoJy50c3gnKSB8fCBmaWxlLmVuZHNXaXRoKCcudHMnKSB8fCBmaWxlLmVuZHNXaXRoKCcuanN4JykgfHwgZmlsZS5lbmRzV2l0aCgnLmpzJykpO1xuICAgICAgXG4gICAgICAvLyBTa2lwIGNsaWVudCBjb21wb25lbnRzIOKAlCBsZXQgQHZpdGVqcy9wbHVnaW4tcmVhY3QgaGFuZGxlIHRoZW1cbiAgICAgIC8vIHdpdGggRmFzdCBSZWZyZXNoIChwcmVzZXJ2ZXMgY29tcG9uZW50LWxldmVsIHN0YXRlKS5cbiAgICAgIGNvbnN0IGlzQ2xpZW50RmlsZSA9IGlzU291cmNlRmlsZSAmJiAoKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGhlYWQgPSByZWFkRmlsZVN5bmMoZmlsZSwgJ3V0Zi04Jykuc2xpY2UoMCwgMjAwKTtcbiAgICAgICAgICByZXR1cm4gL15cXHMqW1wiJ111c2UgY2xpZW50W1wiJ10vLnRlc3QoaGVhZC5zcGxpdCgnXFxuJylbMF0pO1xuICAgICAgICB9IGNhdGNoIHsgcmV0dXJuIGZhbHNlOyB9XG4gICAgICB9KSgpO1xuICAgICAgXG4gICAgICBpZiAoaXNTb3VyY2VGaWxlICYmICFpc0NsaWVudEZpbGUpIHtcbiAgICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRmlsZSBjaGFuZ2VkIChSU0MgcmVmZXRjaCk6ICR7bm9ybWFsaXplZEZpbGV9YCk7XG4gICAgICAgIFxuICAgICAgICAvLyBTZW5kIGN1c3RvbSBITVIgZXZlbnQgc28gY2xpZW50IGNhbiByZWZldGNoIFJTQyBzdHJlYW1cbiAgICAgICAgc2VydmVyLndzLnNlbmQoe1xuICAgICAgICAgIHR5cGU6ICdjdXN0b20nLFxuICAgICAgICAgIGV2ZW50OiAndml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOnNlcnZlci1jb21wb25lbnQtdXBkYXRlJyxcbiAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICBmaWxlOiBub3JtYWxpemVkRmlsZSxcbiAgICAgICAgICAgIHBhdGg6IGZpbGUsXG4gICAgICAgICAgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICAvLyBJbnZhbGlkYXRlIHRoZSBzZXJ2ZXIgbW9kdWxlIHNvIG5leHQgcmVxdWVzdCBnZXRzIGZyZXNoIGNvbnRlbnRcbiAgICAgICAgY29uc3QgbW9kID0gc2VydmVyLmVudmlyb25tZW50c1snc2VydmVyJ10/Lm1vZHVsZUdyYXBoPy5nZXRNb2R1bGVzQnlGaWxlKGZpbGUpO1xuICAgICAgICBpZiAobW9kKSB7XG4gICAgICAgICAgZm9yIChjb25zdCBtIG9mIG1vZCkge1xuICAgICAgICAgICAgc2VydmVyLmVudmlyb25tZW50c1snc2VydmVyJ10/Lm1vZHVsZUdyYXBoPy5pbnZhbGlkYXRlTW9kdWxlKG0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBcbiAgICAgICAgLy8gUmV0dXJuIGVtcHR5IGFycmF5IHRvIHByZXZlbnQgVml0ZSdzIGRlZmF1bHQgZnVsbC1wYWdlIHJlbG9hZFxuICAgICAgICAvLyBUaGUgY2xpZW50IHdpbGwgcmVmZXRjaCB0aGUgUlNDIHN0cmVhbSB2aWEgdGhlIGN1c3RvbSBldmVudFxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgICBcbiAgICAgIGlmIChpc0NsaWVudEZpbGUpIHtcbiAgICAgICAgLy8gQ2xpZW50IGNvbXBvbmVudHMgYXJlIGhhbmRsZWQgYnkgQHZpdGVqcy9wbHVnaW4tcmVhY3QgKEZhc3QgUmVmcmVzaClcbiAgICAgICAgLy8gb3IgVml0ZSdzIGNsaWVudC1zaWRlIEhNUi4gUmV0dXJuIGVtcHR5IHRvIHByZXZlbnQgdGhlIHNlcnZlclxuICAgICAgICAvLyBlbnZpcm9ubWVudCBmcm9tIHRyaWdnZXJpbmcgYSBmdWxsIHBhZ2UgcmVsb2FkLlxuICAgICAgICByZXR1cm4gW107XG4gICAgICB9XG4gICAgfSxcbiAgfTtcblxuICBjb25zdCBzZXJ2ZXJQbHVnaW4gPSB7XG4gICAgbmFtZTogXCJ2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXI6ZGV2LXNlcnZlci1zZXJ2ZXJcIixcbiAgICBhcHBseTogXCJzZXJ2ZVwiIGFzIGNvbnN0LFxuYXBwbHlUb0Vudmlyb25tZW50KHBhcnRpYWxFbnZpcm9ubWVudDogYW55KSB7XG4gICAgICByZXR1cm4gcGFydGlhbEVudmlyb25tZW50Py5jb25zdW1lciA9PT0gJ3NlcnZlcic7XG4gICAgfSxcbiAgICBjb25maWd1cmVTZXJ2ZXIoc2VydmVyOiBWaXRlRGV2U2VydmVyKSB7XG4gICAgICAvLyBMb2cgdGhhdCBwbHVnaW4gaXMgYmVpbmcgY29uZmlndXJlZFxuICAgICAgc2VydmVyLmNvbmZpZy5sb2dnZXIuaW5mbyhgW3ZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcl0gRGV2IHNlcnZlciBwbHVnaW4gY29uZmlndXJlZCBmb3Igc2VydmVyIGVudmlyb25tZW50IChyZWFjdC1zZXJ2ZXIgY29uZGl0aW9uKWApO1xuICAgICAgXG4gICAgICAvLyBDb25maWd1cmUgdGhlIFJlYWN0IHNlcnZlciBmb3Igc2VydmVyIGVudmlyb25tZW50IChkaXJlY3QgUlNDIHByb2Nlc3NpbmcpXG4gICAgICAvLyBUaGlzIHVzZXMgdGhlIGV4aXN0aW5nIGNvbmZpZ3VyZVJlYWN0U2VydmVyLnNlcnZlci5qcyBpbXBsZW1lbnRhdGlvblxuICAgICAgY29uZmlndXJlUmVhY3RTZXJ2ZXIoe1xuICAgICAgICBzZXJ2ZXIsXG4gICAgICAgIGF1dG9EaXNjb3ZlcmVkRmlsZXM6IHtcbiAgICAgICAgICBwcm9wc01hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHBhZ2VNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICByb290TWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgaHRtbE1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHJvdXRlTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgdXJsTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgZXJyb3JzOiBbXSxcbiAgICAgICAgICB3b3JrZXJQYXRoczoge30sXG4gICAgICAgICAgc2VydmVyRW50cnk6IG51bGwsXG4gICAgICAgICAgY2xpZW50RW50cnk6IHt9LFxuICAgICAgICAgIGNsaWVudElucHV0czoge30sXG4gICAgICAgICAgc3RhdGljSW5wdXRzOiB7fSxcbiAgICAgICAgICBzZXJ2ZXJJbnB1dHM6IHt9LFxuICAgICAgICAgIC8vIHN0YXRpY01hbmlmZXN0IHJlbW92ZWQgZnJvbSBBdXRvRGlzY292ZXJlZEZpbGVzXG4gICAgICAgICAgc2VydmVyQWN0aW9uczoge30sXG4gICAgICAgIH0sXG4gICAgICAgIHVzZXJPcHRpb25zLFxuICAgICAgICBzZXJ2ZXJNYW5pZmVzdDoge30sXG4gICAgICAgIHJlc29sdmVkQ29uZmlnOiBzZXJ2ZXIuY29uZmlnLFxuICAgICAgfSk7XG4gICAgfSxcbiAgfTtcblxuICAvLyBGaXggQ0pTIG5hbWVkIGltcG9ydHMgaW4gc2VydmVyIGVudmlyb25tZW50LlxuICAvLyBWaXRlJ3MgZXNidWlsZCBKU1ggdHJhbnNmb3JtIChhbmQgQHZpdGVqcy9wbHVnaW4tcmVhY3QgaWYgcHJlc2VudCkgZ2VuZXJhdGVzXG4gIC8vIG5hbWVkIGltcG9ydHMgbGlrZSBgaW1wb3J0IHsgdXNlRWZmZWN0IH0gZnJvbSBcInJlYWN0XCJgLiBJbiB0aGUgc2VydmVyIGVudmlyb25tZW50LFxuICAvLyByZWFjdCdzIHJlYWN0LXNlcnZlciBleHBvcnQgaXMgQ0pTLW9ubHksIGFuZCBOb2RlJ3MgRVNNIGludGVyb3AgZG9lc24ndCBzdXBwb3J0XG4gIC8vIG5hbWVkIGV4cG9ydHMgZnJvbSBDSlMuIFRoaXMgcG9zdC10cmFuc2Zvcm0gcmV3cml0ZXMgdGhlbS5cbiAgY29uc3QgY2pzRml4UGx1Z2luOiBQbHVnaW4gPSB7XG4gICAgbmFtZTogXCJ2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXI6c2VydmVyLWNqcy1maXhcIixcbiAgICBhcHBseTogXCJzZXJ2ZVwiIGFzIGNvbnN0LFxuICAgIGVuZm9yY2U6IFwicG9zdFwiIGFzIGNvbnN0LFxuICAgIGFwcGx5VG9FbnZpcm9ubWVudChlbnY6IGFueSkge1xuICAgICAgcmV0dXJuIGVudj8ubmFtZSA9PT0gJ3NlcnZlcic7XG4gICAgfSxcbiAgICB0cmFuc2Zvcm0oY29kZTogc3RyaW5nLCBpZDogc3RyaW5nKSB7XG4gICAgICBpZiAoaWQuaW5jbHVkZXMoJ25vZGVfbW9kdWxlcycpKSByZXR1cm47XG4gICAgICBpZiAoIWlkLm1hdGNoKC9cXC5banRdc3g/JC8pKSByZXR1cm47XG4gICAgICBcbiAgICAgIGNvbnN0IG5hbWVkSW1wb3J0UmUgPSAvaW1wb3J0XFxzKlxceyhbXn1dKylcXH1cXHMqZnJvbVxccypbXCInXXJlYWN0W1wiJ11cXHMqOz8vZztcbiAgICAgIGlmICghbmFtZWRJbXBvcnRSZS50ZXN0KGNvZGUpKSByZXR1cm47XG4gICAgICBcbiAgICAgIG5hbWVkSW1wb3J0UmUubGFzdEluZGV4ID0gMDtcbiAgICAgIGxldCBjb3VudGVyID0gMDtcbiAgICAgIGNvbnN0IHJlc3VsdCA9IGNvZGUucmVwbGFjZShuYW1lZEltcG9ydFJlLCAoX21hdGNoLCBpbXBvcnRzKSA9PiB7XG4gICAgICAgIGNvbnN0IGFsaWFzID0gYF9fcmVhY3RfY2pzXyR7Y291bnRlcisrfWA7XG4gICAgICAgIHJldHVybiBgaW1wb3J0ICR7YWxpYXN9IGZyb20gXCJyZWFjdFwiOyBjb25zdCB7JHtpbXBvcnRzfX0gPSAke2FsaWFzfTtgO1xuICAgICAgfSk7XG4gICAgICBcbiAgICAgIHJldHVybiB7IGNvZGU6IHJlc3VsdCwgbWFwOiBudWxsIH07XG4gICAgfSxcbiAgfTtcblxuICByZXR1cm4gW2htclBsdWdpbiwgY2pzRml4UGx1Z2luLCBzZXJ2ZXJQbHVnaW5dO1xufTtcbiJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7QUFVYSxNQUFBLHdCQUFBLEdBQTJCLFNBQVMsK0JBQUEsQ0FBZ0MsT0FBd0MsRUFBQTtBQUN2SCxFQUFBLElBQUksV0FBVyxJQUFNLEVBQUE7QUFDbkIsSUFBTSxNQUFBLElBQUksTUFBTSxxQkFBcUIsQ0FBQTtBQUFBO0FBR3ZDLEVBQU0sTUFBQSxlQUFBLEdBQWtCLGVBQWUsT0FBTyxDQUFBO0FBQzlDLEVBQUksSUFBQSxlQUFBLENBQWdCLFNBQVMsT0FBUyxFQUFBO0FBQ3BDLElBQUksSUFBQSxlQUFBLENBQWdCLFNBQVMsSUFBTSxFQUFBO0FBQ2pDLE1BQUEsTUFBTSxlQUFnQixDQUFBLEtBQUE7QUFBQTtBQUV4QixJQUFNLE1BQUEsSUFBSSxNQUFNLDJCQUEyQixDQUFBO0FBQUE7QUFFN0MsRUFBQSxNQUFNLGNBQWMsZUFBZ0IsQ0FBQSxXQUFBO0FBR3BDLEVBQUEsTUFBTSxTQUFZLEdBQUE7QUFBQSxJQUNoQixJQUFNLEVBQUEscUNBQUE7QUFBQSxJQUNOLEtBQU8sRUFBQSxPQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsSUFJUCxVQUFVLEdBQVUsRUFBQTtBQUNsQixNQUFNLE1BQUEsRUFBRSxJQUFNLEVBQUEsTUFBQSxFQUFXLEdBQUEsR0FBQTtBQUN6QixNQUFNLE1BQUEs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
124
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGx1Z2luLnNlcnZlci5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Rldi1zZXJ2ZXIvcGx1Z2luLnNlcnZlci50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFN0cmVhbVBsdWdpbk9wdGlvbnMgfSBmcm9tIFwiLi4vLi4vdHlwZXMuanNcIjtcbmltcG9ydCB7IGNvbmZpZ3VyZVJlYWN0U2VydmVyIH0gZnJvbSBcIi4vY29uZmlndXJlUmVhY3RTZXJ2ZXIuc2VydmVyLmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZU9wdGlvbnMuanNcIjtcbmltcG9ydCB0eXBlIHsgUGx1Z2luLCBWaXRlRGV2U2VydmVyIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB7IHJlYWRGaWxlU3luYyB9IGZyb20gXCJub2RlOmZzXCI7XG5cbi8qKlxuICogRGV2IHNlcnZlciBwbHVnaW4gZm9yIHNlcnZlciBlbnZpcm9ubWVudC5cbiAqIFJldHVybnMgdHdvIHBsdWdpbnM6IG9uZSBmb3IgSE1SIGhhbmRsaW5nIChhbGwgZW52aXJvbm1lbnRzKSBhbmQgb25lIGZvciBzZXJ2ZXIgY29uZmlnLlxuICovXG5leHBvcnQgY29uc3Qgdml0ZVBsdWdpblJlYWN0RGV2U2VydmVyID0gZnVuY3Rpb24gX3ZpdGVQbHVnaW5SZWFjdFNlcnZlckRldlNlcnZlcihvcHRpb25zOiBTdHJlYW1QbHVnaW5PcHRpb25zKTogUGx1Z2luW10ge1xuICBpZiAob3B0aW9ucyA9PSBudWxsKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwib3B0aW9ucyBpcyByZXF1aXJlZFwiKTtcbiAgfVxuXG4gIGNvbnN0IHJlc29sdmVkT3B0aW9ucyA9IHJlc29sdmVPcHRpb25zKG9wdGlvbnMpO1xuICBpZiAocmVzb2x2ZWRPcHRpb25zLnR5cGUgPT09IFwiZXJyb3JcIikge1xuICAgIGlmIChyZXNvbHZlZE9wdGlvbnMuZXJyb3IgIT0gbnVsbCkge1xuICAgICAgdGhyb3cgcmVzb2x2ZWRPcHRpb25zLmVycm9yO1xuICAgIH1cbiAgICB0aHJvdyBuZXcgRXJyb3IoXCJGYWlsZWQgdG8gcmVzb2x2ZSBvcHRpb25zXCIpO1xuICB9XG4gIGNvbnN0IHVzZXJPcHRpb25zID0gcmVzb2x2ZWRPcHRpb25zLnVzZXJPcHRpb25zO1xuXG4gIC8vIFNlcGFyYXRlIHBsdWdpbiBmb3IgSE1SIGhhbmRsaW5nIChtdXN0IGFwcGx5IHRvIGFsbCBlbnZpcm9ubWVudHMpXG4gIGNvbnN0IGhtclBsdWdpbiA9IHtcbiAgICBuYW1lOiBcInZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcjpzZXJ2ZXItaG1yXCIsXG4gICAgYXBwbHk6IFwic2VydmVcIiBhcyBjb25zdCxcbiAgICAvLyBTZXJ2ZXItbGV2ZWwgaGFuZGxlSG90VXBkYXRlIOKAlCBzZW5kcyBjdXN0b20gV1MgZXZlbnQgdG8gY2xpZW50XG4gICAgLy8gVml0ZSA2IEVudmlyb25tZW50IEFQSTogaG90VXBkYXRlIHJ1bnMgcGVyLWVudmlyb25tZW50LlxuICAgIC8vIFByZXZlbnQgc2VydmVyL3NzciBlbnZpcm9ubWVudHMgZnJvbSB0cmlnZ2VyaW5nIHBhZ2UgcmVsb2FkIGZvciBjbGllbnQgY29tcG9uZW50cy5cbiAgICBob3RVcGRhdGUoY3R4OiBhbnkpIHtcbiAgICAgIGNvbnN0IHsgZmlsZSwgc2VydmVyIH0gPSBjdHg7XG4gICAgICBjb25zdCBlbnZOYW1lID0gY3R4LmVudmlyb25tZW50Py5uYW1lID8/ICd1bmtub3duJztcbiAgICAgIFxuICAgICAgY29uc3QgbW9kdWxlQmFzZSA9IHVzZXJPcHRpb25zLm1vZHVsZUJhc2UgfHwgXCJzcmNcIjtcbiAgICAgIGNvbnN0IHByb2plY3RSb290ID0gdXNlck9wdGlvbnMucHJvamVjdFJvb3QgfHwgc2VydmVyPy5jb25maWc/LnJvb3QgfHwgJyc7XG4gICAgICBjb25zdCBub3JtYWxpemVkRmlsZSA9IGZpbGUucmVwbGFjZShwcm9qZWN0Um9vdCwgJycpLnJlcGxhY2UoL15cXC8rLywgJycpO1xuICAgICAgY29uc3QgaXNTb3VyY2VGaWxlID0gbm9ybWFsaXplZEZpbGUuc3RhcnRzV2l0aChtb2R1bGVCYXNlICsgJy8nKTtcbiAgICAgIFxuICAgICAgaWYgKCFpc1NvdXJjZUZpbGUpIHJldHVybjtcbiAgICAgIFxuICAgICAgLy8gQ2xpZW50IGVudmlyb25tZW50OiBsZXQgVml0ZS9Adml0ZWpzL3BsdWdpbi1yZWFjdCBoYW5kbGUgaXRcbiAgICAgIGlmIChlbnZOYW1lID09PSAnY2xpZW50Jykge1xuICAgICAgICAvLyBDaGVjayBpZiBpdCdzIGEgY2xpZW50IGNvbXBvbmVudCDigJQgbGV0IEZhc3QgUmVmcmVzaCBoYW5kbGUgaXRcbiAgICAgICAgY29uc3QgaXNDbGllbnQgPSAoZmlsZS5lbmRzV2l0aCgnLnRzeCcpIHx8IGZpbGUuZW5kc1dpdGgoJy50cycpIHx8IGZpbGUuZW5kc1dpdGgoJy5qc3gnKSB8fCBmaWxlLmVuZHNXaXRoKCcuanMnKSkgJiYgKCgpID0+IHtcbiAgICAgICAgICAvLyBDaGVjayBmaWxlbmFtZSBwYXR0ZXJuICguY2xpZW50LnRzeCwgLmNsaWVudC50cywgZXRjLikg4oCUIG1hdGNoZXMgaXNDbGllbnRDb21wb25lbnRCeU5hbWVcbiAgICAgICAgICBpZiAoL1xcLmNsaWVudFxcLihqc3x0c3xqc3h8dHN4KSQvLnRlc3QoZmlsZSkpIHJldHVybiB0cnVlO1xuICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBoZWFkID0gcmVhZEZpbGVTeW5jKGZpbGUsICd1dGYtOCcpLnNsaWNlKDAsIDIwMCk7XG4gICAgICAgICAgICByZXR1cm4gL15cXHMqW1wiJ111c2UgY2xpZW50W1wiJ10vLnRlc3QoaGVhZC5zcGxpdCgnXFxuJylbMF0pO1xuICAgICAgICAgIH0gY2F0Y2ggeyByZXR1cm4gZmFsc2U7IH1cbiAgICAgICAgfSkoKTtcbiAgICAgICAgXG4gICAgICAgIGlmIChpc0NsaWVudCkgcmV0dXJuOyAvLyBMZXQgRmFzdCBSZWZyZXNoIGhhbmRsZSBjbGllbnQgY29tcG9uZW50c1xuICAgICAgICBcbiAgICAgICAgLy8gU2VydmVyIGNvbXBvbmVudCBjaGFuZ2VkIOKAlCBzZW5kIFJTQyByZWZldGNoIGV2ZW50IHRvIGNsaWVudFxuICAgICAgICAvLyBPbmx5IGRvIHRoaXMgb25jZSAoZnJvbSBjbGllbnQgZW52KSB0byBhdm9pZCBkdXBsaWNhdGUgZXZlbnRzXG4gICAgICAgIHNlcnZlci5jb25maWcubG9nZ2VyLmluZm8oYFt2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXJdIEZpbGUgY2hhbmdlZCAoUlNDIHJlZmV0Y2gpOiAke25vcm1hbGl6ZWRGaWxlfWApO1xuICAgICAgICBzZXJ2ZXIud3Muc2VuZCh7XG4gICAgICAgICAgdHlwZTogJ2N1c3RvbScsXG4gICAgICAgICAgZXZlbnQ6ICd2aXRlLXBsdWdpbi1yZWFjdC1zZXJ2ZXI6c2VydmVyLWNvbXBvbmVudC11cGRhdGUnLFxuICAgICAgICAgIGRhdGE6IHsgZmlsZTogbm9ybWFsaXplZEZpbGUsIHBhdGg6IGZpbGUgfSxcbiAgICAgICAgfSk7XG4gICAgICAgIFxuICAgICAgICByZXR1cm4gW107IC8vIERvbid0IHRyaWdnZXIgY2xpZW50LXNpZGUgcGFnZSByZWxvYWRcbiAgICAgIH1cbiAgICAgIFxuICAgICAgLy8gU2VydmVyL1NTUiBlbnZpcm9ubWVudHM6IHN1cHByZXNzIHBhZ2UgcmVsb2FkIGZvciBhbGwgc291cmNlIGZpbGVzXG4gICAgICAvLyBTZXJ2ZXIgY29tcG9uZW50cyBhcmUgaGFuZGxlZCBieSB0aGUgUlNDIHJlZmV0Y2ggZXZlbnQgc2VudCBhYm92ZVxuICAgICAgLy8gSW52YWxpZGF0ZSB0aGUgc2VydmVyIG1vZHVsZSBzbyBuZXh0IFJTQyByZXF1ZXN0IGdldHMgZnJlc2ggY29udGVudFxuICAgICAgaWYgKGVudk5hbWUgPT09ICdzZXJ2ZXInKSB7XG4gICAgICAgIGNvbnN0IG1vZCA9IGN0eC5lbnZpcm9ubWVudD8ubW9kdWxlR3JhcGg/LmdldE1vZHVsZXNCeUZpbGUoZmlsZSk7XG4gICAgICAgIGlmIChtb2QpIHtcbiAgICAgICAgICBmb3IgKGNvbnN0IG0gb2YgbW9kKSB7XG4gICAgICAgICAgICBjdHguZW52aXJvbm1lbnQubW9kdWxlR3JhcGguaW52YWxpZGF0ZU1vZHVsZShtKTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbXTtcbiAgICB9LFxuICB9O1xuXG4gIGNvbnN0IHNlcnZlclBsdWdpbiA9IHtcbiAgICBuYW1lOiBcInZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcjpkZXYtc2VydmVyLXNlcnZlclwiLFxuICAgIGFwcGx5OiBcInNlcnZlXCIgYXMgY29uc3QsXG5hcHBseVRvRW52aXJvbm1lbnQocGFydGlhbEVudmlyb25tZW50OiBhbnkpIHtcbiAgICAgIHJldHVybiBwYXJ0aWFsRW52aXJvbm1lbnQ/LmNvbnN1bWVyID09PSAnc2VydmVyJztcbiAgICB9LFxuICAgIGNvbmZpZ3VyZVNlcnZlcihzZXJ2ZXI6IFZpdGVEZXZTZXJ2ZXIpIHtcbiAgICAgIC8vIExvZyB0aGF0IHBsdWdpbiBpcyBiZWluZyBjb25maWd1cmVkXG4gICAgICBzZXJ2ZXIuY29uZmlnLmxvZ2dlci5pbmZvKGBbdml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyXSBEZXYgc2VydmVyIHBsdWdpbiBjb25maWd1cmVkIGZvciBzZXJ2ZXIgZW52aXJvbm1lbnQgKHJlYWN0LXNlcnZlciBjb25kaXRpb24pYCk7XG4gICAgICBcbiAgICAgIC8vIENvbmZpZ3VyZSB0aGUgUmVhY3Qgc2VydmVyIGZvciBzZXJ2ZXIgZW52aXJvbm1lbnQgKGRpcmVjdCBSU0MgcHJvY2Vzc2luZylcbiAgICAgIC8vIFRoaXMgdXNlcyB0aGUgZXhpc3RpbmcgY29uZmlndXJlUmVhY3RTZXJ2ZXIuc2VydmVyLmpzIGltcGxlbWVudGF0aW9uXG4gICAgICBjb25maWd1cmVSZWFjdFNlcnZlcih7XG4gICAgICAgIHNlcnZlcixcbiAgICAgICAgYXV0b0Rpc2NvdmVyZWRGaWxlczoge1xuICAgICAgICAgIHByb3BzTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgcGFnZU1hcDogbmV3IE1hcCgpLFxuICAgICAgICAgIHJvb3RNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICBodG1sTWFwOiBuZXcgTWFwKCksXG4gICAgICAgICAgcm91dGVNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICB1cmxNYXA6IG5ldyBNYXAoKSxcbiAgICAgICAgICBlcnJvcnM6IFtdLFxuICAgICAgICAgIHdvcmtlclBhdGhzOiB7fSxcbiAgICAgICAgICBzZXJ2ZXJFbnRyeTogbnVsbCxcbiAgICAgICAgICBjbGllbnRFbnRyeToge30sXG4gICAgICAgICAgY2xpZW50SW5wdXRzOiB7fSxcbiAgICAgICAgICBzdGF0aWNJbnB1dHM6IHt9LFxuICAgICAgICAgIHNlcnZlcklucHV0czoge30sXG4gICAgICAgICAgLy8gc3RhdGljTWFuaWZlc3QgcmVtb3ZlZCBmcm9tIEF1dG9EaXNjb3ZlcmVkRmlsZXNcbiAgICAgICAgICBzZXJ2ZXJBY3Rpb25zOiB7fSxcbiAgICAgICAgfSxcbiAgICAgICAgdXNlck9wdGlvbnMsXG4gICAgICAgIHNlcnZlck1hbmlmZXN0OiB7fSxcbiAgICAgICAgcmVzb2x2ZWRDb25maWc6IHNlcnZlci5jb25maWcsXG4gICAgICB9KTtcbiAgICB9LFxuICB9O1xuXG4gIC8vIEZpeCBDSlMgbmFtZWQgaW1wb3J0cyBpbiBzZXJ2ZXIgZW52aXJvbm1lbnQuXG4gIC8vIFZpdGUncyBlc2J1aWxkIEpTWCB0cmFuc2Zvcm0gKGFuZCBAdml0ZWpzL3BsdWdpbi1yZWFjdCBpZiBwcmVzZW50KSBnZW5lcmF0ZXNcbiAgLy8gbmFtZWQgaW1wb3J0cyBsaWtlIGBpbXBvcnQgeyB1c2VFZmZlY3QgfSBmcm9tIFwicmVhY3RcImAuIEluIHRoZSBzZXJ2ZXIgZW52aXJvbm1lbnQsXG4gIC8vIHJlYWN0J3MgcmVhY3Qtc2VydmVyIGV4cG9ydCBpcyBDSlMtb25seSwgYW5kIE5vZGUncyBFU00gaW50ZXJvcCBkb2Vzbid0IHN1cHBvcnRcbiAgLy8gbmFtZWQgZXhwb3J0cyBmcm9tIENKUy4gVGhpcyBwb3N0LXRyYW5zZm9ybSByZXdyaXRlcyB0aGVtLlxuICBjb25zdCBjanNGaXhQbHVnaW46IFBsdWdpbiA9IHtcbiAgICBuYW1lOiBcInZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcjpzZXJ2ZXItY2pzLWZpeFwiLFxuICAgIGFwcGx5OiBcInNlcnZlXCIgYXMgY29uc3QsXG4gICAgZW5mb3JjZTogXCJwb3N0XCIgYXMgY29uc3QsXG4gICAgYXBwbHlUb0Vudmlyb25tZW50KGVudjogYW55KSB7XG4gICAgICByZXR1cm4gZW52Py5uYW1lID09PSAnc2VydmVyJztcbiAgICB9LFxuICAgIHRyYW5zZm9ybShjb2RlOiBzdHJpbmcsIGlkOiBzdHJpbmcpIHtcbiAgICAgIGlmIChpZC5pbmNsdWRlcygnbm9kZV9tb2R1bGVzJykpIHJldHVybjtcbiAgICAgIGlmICghaWQubWF0Y2goL1xcLltqdF1zeD8kLykpIHJldHVybjtcbiAgICAgIFxuICAgICAgY29uc3QgbmFtZWRJbXBvcnRSZSA9IC9pbXBvcnRcXHMqXFx7KFtefV0rKVxcfVxccypmcm9tXFxzKltcIiddcmVhY3RbXCInXVxccyo7Py9nO1xuICAgICAgaWYgKCFuYW1lZEltcG9ydFJlLnRlc3QoY29kZSkpIHJldHVybjtcbiAgICAgIFxuICAgICAgbmFtZWRJbXBvcnRSZS5sYXN0SW5kZXggPSAwO1xuICAgICAgbGV0IGNvdW50ZXIgPSAwO1xuICAgICAgY29uc3QgcmVzdWx0ID0gY29kZS5yZXBsYWNlKG5hbWVkSW1wb3J0UmUsIChfbWF0Y2gsIGltcG9ydHMpID0+IHtcbiAgICAgICAgY29uc3QgYWxpYXMgPSBgX19yZWFjdF9janNfJHtjb3VudGVyKyt9YDtcbiAgICAgICAgcmV0dXJuIGBpbXBvcnQgJHthbGlhc30gZnJvbSBcInJlYWN0XCI7IGNvbnN0IHske2ltcG9ydHN9fSA9ICR7YWxpYXN9O2A7XG4gICAgICB9KTtcbiAgICAgIFxuICAgICAgcmV0dXJuIHsgY29kZTogcmVzdWx0LCBtYXA6IG51bGwgfTtcbiAgICB9LFxuICB9O1xuXG4gIHJldHVybiBbaG1yUGx1Z2luLCBjanNGaXhQbHVnaW4sIHNlcnZlclBsdWdpbl07XG59O1xuIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7OztBQVVhLE1BQUEsd0JBQUEsR0FBMkIsU0FBUywrQkFBQSxDQUFnQyxPQUF3QyxFQUFBO0FBQ3ZILEVBQUEsSUFBSSxXQUFXLElBQU0sRUFBQTtBQUNuQixJQUFNLE1BQUEsSUFBSSxNQUFNLHFCQUFxQixDQUFBO0FBQUE7QUFHdkMsRUFBTSxNQUFBLGVBQUEsR0FBa0IsZUFBZSxPQUFPLENBQUE7QUFDOUMsRUFBSSxJQUFBLGVBQUEsQ0FBZ0IsU0FBUyxPQUFTLEVBQUE7QUFDcEMsSUFBSSxJQUFBLGVBQUEsQ0FBZ0IsU0FBUyxJQUFNLEVBQUE7QUFDakMsTUFBQSxNQUFNLGVBQWdCLENBQUEsS0FBQTtBQUFBO0FBRXhCLElBQU0sTUFBQSxJQUFJLE1BQU0sMkJBQTJCLENBQUE7QUFBQTtBQUU3QyxFQUFBLE1BQU0sY0FBYyxlQUFnQixDQUFBLFdBQUE7QUFHcEMsRUFBQSxNQUFNLFNBQVksR0FBQTtBQUFBLElBQ2hCLElBQU0sRUFBQSxxQ0FBQTtBQUFBLElBQ04sS0FBTyxFQUFBLE9BQUE7QUFBQTtBQUFBO0FBQUE7QUFBQSxJQUlQLFVBQVUsR0FBVSxFQUFBO0FBQ2xCLE1BQU0sTUFBQSxFQUFFLElBQU0sRUFBQSxNQUFBLEVBQVcsR0FBQSxHQUFBO0FBQ3pCLE1BQU0sTUFBQSxPQUFBLEdBQVUsR0FBSSxDQUFBLFdBQUEsRUFBYSxJQUFRLElBQUEsU0FBQTtBQUV6QyxNQUFNLE1BQUEsVUFBQSxHQUFhLFlBQVksVUFBYyxJQUFBLEtBQUE7QUFDN0MsTUFBQSxNQUFNLFdBQWMsR0FBQSxXQUFBLENBQVksV0FBZSxJQUFBLE1BQUEsRUFBUSxRQUFRLElBQVEsSUFBQSxFQUFBO0FBQ3ZFLE1BQU0sTUFB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
@@ -1,11 +1,13 @@
1
- const VIRTUAL_RSC_HMR = 'virtual:react-server/hmr';
2
- const RESOLVED_VIRTUAL_RSC_HMR = '\0' + VIRTUAL_RSC_HMR;
3
1
  /**
4
- * Virtual module source for `virtual:react-server/hmr`.
5
- * Self-contained no imports from the plugin package, so no dep re-optimization.
6
- * HMR code is dead-code eliminated in production builds (import.meta.hot is undefined).
2
+ * vite-plugin-react-server
3
+ * Copyright (c) Nico Brinkkemper
4
+ * MIT License
7
5
  */
8
- const VIRTUAL_RSC_HMR_SOURCE = /* js */ `
6
+ const VIRTUAL_RSC_HMR = "virtual:react-server/hmr";
7
+ const RESOLVED_VIRTUAL_RSC_HMR = "\0" + VIRTUAL_RSC_HMR;
8
+ const VIRTUAL_RSC_HMR_SOURCE = (
9
+ /* js */
10
+ `
9
11
  import { useEffect, useCallback } from "react";
10
12
 
11
13
  const RSC_HMR_EVENT = 'vite-plugin-react-server:server-component-update';
@@ -60,21 +62,19 @@ export function setupRscHmr(options = {}) {
60
62
  console.log('[RSC HMR] Listening for server component updates');
61
63
  }
62
64
  }
63
- `;
64
- /**
65
- * Plugin that provides the `virtual:react-server/hmr` module.
66
- * Works in both dev and build — HMR code tree-shakes away in production.
67
- */
68
- export function virtualRscHmrPlugin() {
69
- return {
70
- name: "vite-plugin-react-server:virtual-rsc-hmr",
71
- resolveId(id) {
72
- if (id === VIRTUAL_RSC_HMR)
73
- return RESOLVED_VIRTUAL_RSC_HMR;
74
- },
75
- load(id) {
76
- if (id === RESOLVED_VIRTUAL_RSC_HMR)
77
- return VIRTUAL_RSC_HMR_SOURCE;
78
- },
79
- };
65
+ `
66
+ );
67
+ function virtualRscHmrPlugin() {
68
+ return {
69
+ name: "vite-plugin-react-server:virtual-rsc-hmr",
70
+ resolveId(id) {
71
+ if (id === VIRTUAL_RSC_HMR) return RESOLVED_VIRTUAL_RSC_HMR;
72
+ },
73
+ load(id) {
74
+ if (id === RESOLVED_VIRTUAL_RSC_HMR) return VIRTUAL_RSC_HMR_SOURCE;
75
+ }
76
+ };
80
77
  }
78
+
79
+ export { virtualRscHmrPlugin };
80
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmlydHVhbFJzY0htclBsdWdpbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Rldi1zZXJ2ZXIvdmlydHVhbFJzY0htclBsdWdpbi50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IFBsdWdpbiB9IGZyb20gXCJ2aXRlXCI7XG5cbmNvbnN0IFZJUlRVQUxfUlNDX0hNUiA9ICd2aXJ0dWFsOnJlYWN0LXNlcnZlci9obXInO1xuY29uc3QgUkVTT0xWRURfVklSVFVBTF9SU0NfSE1SID0gJ1xcMCcgKyBWSVJUVUFMX1JTQ19ITVI7XG5cbi8qKlxuICogVmlydHVhbCBtb2R1bGUgc291cmNlIGZvciBgdmlydHVhbDpyZWFjdC1zZXJ2ZXIvaG1yYC5cbiAqIFNlbGYtY29udGFpbmVkIOKAlCBubyBpbXBvcnRzIGZyb20gdGhlIHBsdWdpbiBwYWNrYWdlLCBzbyBubyBkZXAgcmUtb3B0aW1pemF0aW9uLlxuICogSE1SIGNvZGUgaXMgZGVhZC1jb2RlIGVsaW1pbmF0ZWQgaW4gcHJvZHVjdGlvbiBidWlsZHMgKGltcG9ydC5tZXRhLmhvdCBpcyB1bmRlZmluZWQpLlxuICovXG5jb25zdCBWSVJUVUFMX1JTQ19ITVJfU09VUkNFID0gLyoganMgKi9gXG5pbXBvcnQgeyB1c2VFZmZlY3QsIHVzZUNhbGxiYWNrIH0gZnJvbSBcInJlYWN0XCI7XG5cbmNvbnN0IFJTQ19ITVJfRVZFTlQgPSAndml0ZS1wbHVnaW4tcmVhY3Qtc2VydmVyOnNlcnZlci1jb21wb25lbnQtdXBkYXRlJztcblxuZXhwb3J0IHsgUlNDX0hNUl9FVkVOVCB9O1xuXG5leHBvcnQgZnVuY3Rpb24gdXNlUnNjSG1yKHJlZmV0Y2gsIG9wdGlvbnMgPSB7fSkge1xuICBjb25zdCB7IHZlcmJvc2UgPSB0cnVlLCBmaWx0ZXIgfSA9IG9wdGlvbnM7XG5cbiAgY29uc3QgaGFuZGxlciA9IHVzZUNhbGxiYWNrKFxuICAgIChkYXRhKSA9PiB7XG4gICAgICBpZiAoZmlsdGVyICYmICFmaWx0ZXIoZGF0YSkpIHJldHVybjtcbiAgICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKCdbUlNDIEhNUl0gU2VydmVyIGNvbXBvbmVudCB1cGRhdGVkOicsIGRhdGEuZmlsZSk7XG4gICAgICB9XG4gICAgICByZWZldGNoKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSk7XG4gICAgfSxcbiAgICBbcmVmZXRjaCwgdmVyYm9zZSwgZmlsdGVyXVxuICApO1xuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKHR5cGVvZiBpbXBvcnQubWV0YS5ob3QgPT09ICd1bmRlZmluZWQnKSByZXR1cm47XG4gICAgaW1wb3J0Lm1ldGEuaG90Lm9uKFJTQ19ITVJfRVZFTlQsIGhhbmRsZXIpO1xuICAgIGlmICh2ZXJib3NlKSB7XG4gICAgICBjb25zb2xlLmxvZygnW1JTQyBITVJdIExpc3RlbmluZyBmb3Igc2VydmVyIGNvbXBvbmVudCB1cGRhdGVzJyk7XG4gICAgfVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICBpbXBvcnQubWV0YS5ob3Qub2ZmKFJTQ19ITVJfRVZFTlQsIGhhbmRsZXIpO1xuICAgIH07XG4gIH0sIFtoYW5kbGVyLCB2ZXJib3NlXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cFJzY0htcihvcHRpb25zID0ge30pIHtcbiAgY29uc3QgeyBvblVwZGF0ZSwgdmVyYm9zZSA9IHRydWUgfSA9IG9wdGlvbnM7XG4gIGlmICh0eXBlb2YgaW1wb3J0Lm1ldGEuaG90ID09PSAndW5kZWZpbmVkJykgcmV0dXJuO1xuICBpbXBvcnQubWV0YS5ob3Qub24oUlNDX0hNUl9FVkVOVCwgYXN5bmMgKGRhdGEpID0+IHtcbiAgICBpZiAodmVyYm9zZSkge1xuICAgICAgY29uc29sZS5sb2coJ1tSU0MgSE1SXSBTZXJ2ZXIgY29tcG9uZW50IHVwZGF0ZWQ6JywgZGF0YS5maWxlKTtcbiAgICB9XG4gICAgaWYgKG9uVXBkYXRlID09PSAncmVsb2FkJykge1xuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAob25VcGRhdGUpIHtcbiAgICAgIHRyeSB7IGF3YWl0IG9uVXBkYXRlKGRhdGEpOyB9XG4gICAgICBjYXRjaCAoZXJyb3IpIHsgY29uc29sZS5lcnJvcignW1JTQyBITVJdIEVycm9yIGluIG9uVXBkYXRlIGhhbmRsZXI6JywgZXJyb3IpOyB3aW5kb3cubG9jYXRpb24ucmVsb2FkKCk7IH1cbiAgICB9IGVsc2Uge1xuICAgICAgd2luZG93LmxvY2F0aW9uLnJlbG9hZCgpO1xuICAgIH1cbiAgfSk7XG4gIGlmICh2ZXJib3NlKSB7XG4gICAgY29uc29sZS5sb2coJ1tSU0MgSE1SXSBMaXN0ZW5pbmcgZm9yIHNlcnZlciBjb21wb25lbnQgdXBkYXRlcycpO1xuICB9XG59XG5gO1xuXG4vKipcbiAqIFBsdWdpbiB0aGF0IHByb3ZpZGVzIHRoZSBgdmlydHVhbDpyZWFjdC1zZXJ2ZXIvaG1yYCBtb2R1bGUuXG4gKiBXb3JrcyBpbiBib3RoIGRldiBhbmQgYnVpbGQg4oCUIEhNUiBjb2RlIHRyZWUtc2hha2VzIGF3YXkgaW4gcHJvZHVjdGlvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZpcnR1YWxSc2NIbXJQbHVnaW4oKTogUGx1Z2luIHtcbiAgcmV0dXJuIHtcbiAgICBuYW1lOiBcInZpdGUtcGx1Z2luLXJlYWN0LXNlcnZlcjp2aXJ0dWFsLXJzYy1obXJcIixcbiAgICByZXNvbHZlSWQoaWQpIHtcbiAgICAgIGlmIChpZCA9PT0gVklSVFVBTF9SU0NfSE1SKSByZXR1cm4gUkVTT0xWRURfVklSVFVBTF9SU0NfSE1SO1xuICAgIH0sXG4gICAgbG9hZChpZCkge1xuICAgICAgaWYgKGlkID09PSBSRVNPTFZFRF9WSVJUVUFMX1JTQ19ITVIpIHJldHVybiBWSVJUVUFMX1JTQ19ITVJfU09VUkNFO1xuICAgIH0sXG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFFQSxNQUFNLGVBQWtCLEdBQUEsMEJBQUE7QUFDeEIsTUFBTSwyQkFBMkIsSUFBTyxHQUFBLGVBQUE7QUFPeEMsTUFBTSxzQkFBQTtBQUFBO0FBQUEsRUFBaUM7QUFBQTs7QUFBQTs7QUFBQTs7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBOztBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7O0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBLENBQUE7QUE2RGhDLFNBQVMsbUJBQThCLEdBQUE7QUFDckMsRUFBQSxPQUFBO0FBQUEsSUFDTCxJQUFNLEVBQUEsMENBQUE7QUFBQSxJQUNOLFVBQVUsRUFBSSxFQUFBO0FBQ1IsTUFBQSxJQUFBLEVBQUEsS0FBTyxpQkFBd0IsT0FBQSx3QkFBQTtBQUFBLEtBQ3JDO0FBQUEsSUFDQSxLQUFLLEVBQUksRUFBQTtBQUNILE1BQUEsSUFBQSxFQUFBLEtBQU8sMEJBQWlDLE9BQUEsc0JBQUE7QUFBQTtBQUM5QyxHQUNGO0FBQ0Y7Ozs7In0=
@@ -1,100 +1,90 @@
1
- import { resolveOptions } from "../config/resolveOptions.js";
2
- import { getBundleManifest } from "../helpers/getBundleManifest.js";
3
- import { addServerManifest, updateSharedManifest, signalServerManifestReady, } from "../bundle/manifests.js";
4
- import { handleError } from "../error/handleError.js";
5
- export function createBuildEventPlugin(options) {
6
- return {
7
- name: "vite:plugin-react-server:build-events",
8
- enforce: "post",
9
- apply: "build",
10
- writeBundle(outputOptions, bundle) {
11
- const resolvedOptionsResult = resolveOptions(options);
12
- if (resolvedOptionsResult.type === "error") {
13
- return;
1
+ /**
2
+ * vite-plugin-react-server
3
+ * Copyright (c) Nico Brinkkemper
4
+ * MIT License
5
+ */
6
+ import { resolveOptions } from '../config/resolveOptions.js';
7
+ import { getBundleManifest } from '../helpers/getBundleManifest.js';
8
+ import { addServerManifest, updateSharedManifest, signalServerManifestReady } from '../bundle/manifests.js';
9
+ import { handleError } from '../error/handleError.js';
10
+
11
+ function createBuildEventPlugin(options) {
12
+ return {
13
+ name: "vite:plugin-react-server:build-events",
14
+ enforce: "post",
15
+ apply: "build",
16
+ writeBundle(outputOptions, bundle) {
17
+ const resolvedOptionsResult = resolveOptions(options);
18
+ if (resolvedOptionsResult.type === "error") {
19
+ return;
20
+ }
21
+ const userOptions = resolvedOptionsResult.userOptions;
22
+ const environmentName = this.environment?.name;
23
+ let eventType;
24
+ if (environmentName?.startsWith("client")) {
25
+ eventType = "build.writeBundle.client";
26
+ } else if (environmentName?.startsWith("ssr")) {
27
+ eventType = "build.writeBundle.static";
28
+ } else if (environmentName?.startsWith("server")) {
29
+ eventType = "build.writeBundle.server";
30
+ }
31
+ if (environmentName?.startsWith("server")) {
32
+ try {
33
+ const bundleManifest = getBundleManifest({
34
+ bundle,
35
+ normalizer: userOptions.normalizer
36
+ });
37
+ addServerManifest(bundleManifest);
38
+ updateSharedManifest(this, "server", bundleManifest);
39
+ signalServerManifestReady(bundleManifest);
40
+ } catch (error) {
41
+ const eventPanicError = handleError({
42
+ error,
43
+ panicThreshold: userOptions.panicThreshold});
44
+ if (eventPanicError != null) {
45
+ this.error(eventPanicError);
46
+ } else {
47
+ this.warn(error);
48
+ }
49
+ }
50
+ }
51
+ if (eventType && userOptions.onEvent) {
52
+ try {
53
+ const result = userOptions.onEvent({
54
+ type: eventType,
55
+ data: {
56
+ pages: [],
57
+ options: outputOptions,
58
+ bundle
14
59
  }
15
- const userOptions = resolvedOptionsResult.userOptions;
16
- const environmentName = this.environment?.name;
17
- // Determine event type based on environment name
18
- let eventType;
19
- if (environmentName?.startsWith("client")) {
20
- eventType = "build.writeBundle.client";
21
- }
22
- else if (environmentName?.startsWith("ssr")) {
23
- eventType = "build.writeBundle.static";
24
- }
25
- else if (environmentName?.startsWith("server")) {
26
- eventType = "build.writeBundle.server";
27
- }
28
- // Store server manifest in global store for SSG plugin access
29
- if (environmentName?.startsWith("server")) {
30
- try {
31
- const bundleManifest = getBundleManifest({
32
- bundle,
33
- normalizer: userOptions.normalizer,
34
- });
35
- // Type assertion since getBundleManifest returns the correct structure
36
- addServerManifest(bundleManifest);
37
- // Also update the shared state between environments
38
- updateSharedManifest(this, "server", bundleManifest);
39
- // Signal that server manifest is ready for waiting consumers
40
- signalServerManifestReady(bundleManifest);
41
- }
42
- catch (error) {
43
- const eventPanicError = handleError({
44
- error,
45
- panicThreshold: userOptions.panicThreshold,
46
- context: `writeBundle(server manifest)`,
47
- });
48
- if (eventPanicError != null) {
49
- this.error(eventPanicError); // Re-throw to abort the build
50
- }
51
- else {
52
- this.warn(error);
53
- }
54
- }
55
- }
56
- if (eventType && userOptions.onEvent) {
57
- try {
58
- const result = userOptions.onEvent({
59
- type: eventType,
60
- data: {
61
- pages: [],
62
- options: outputOptions,
63
- bundle,
64
- },
65
- }); // Type assertion to avoid complex type checking
66
- // Handle async event callbacks
67
- if (result != null &&
68
- typeof result === "object" &&
69
- "then" in result) {
70
- result.catch((error) => {
71
- const eventPanicError = handleError({
72
- error,
73
- panicThreshold: userOptions.panicThreshold,
74
- context: `onEvent(${eventType})`,
75
- });
76
- if (eventPanicError != null) {
77
- throw eventPanicError; // Re-throw to abort the build
78
- }
79
- });
80
- }
81
- }
82
- catch (error) {
83
- const eventPanicError = handleError({
84
- error,
85
- panicThreshold: userOptions.panicThreshold,
86
- context: `onEvent(${eventType})`,
87
- });
88
- if (eventPanicError != null) {
89
- this.error(eventPanicError); // Log the error
90
- throw eventPanicError; // Re-throw to abort the build
91
- }
92
- else {
93
- this.warn(error);
94
- // For non-panic errors, don't throw - just warn
95
- }
96
- }
97
- }
98
- },
99
- };
60
+ });
61
+ if (result != null && typeof result === "object" && "then" in result) {
62
+ result.catch((error) => {
63
+ const eventPanicError = handleError({
64
+ error,
65
+ panicThreshold: userOptions.panicThreshold,
66
+ context: `onEvent(${eventType})`
67
+ });
68
+ if (eventPanicError != null) {
69
+ throw eventPanicError;
70
+ }
71
+ });
72
+ }
73
+ } catch (error) {
74
+ const eventPanicError = handleError({
75
+ error,
76
+ panicThreshold: userOptions.panicThreshold});
77
+ if (eventPanicError != null) {
78
+ this.error(eventPanicError);
79
+ throw eventPanicError;
80
+ } else {
81
+ this.warn(error);
82
+ }
83
+ }
84
+ }
85
+ }
86
+ };
100
87
  }
88
+
89
+ export { createBuildEventPlugin };
90
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlQnVpbGRFdmVudFBsdWdpbi5qcyIsInNvdXJjZXMiOlsiLi4vLi4vLi4vcGx1Z2luL2Vudmlyb25tZW50cy9jcmVhdGVCdWlsZEV2ZW50UGx1Z2luLnRzIl0sInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUGx1Z2luIH0gZnJvbSBcInZpdGVcIjtcbmltcG9ydCB0eXBlIHsgU3RyZWFtUGx1Z2luT3B0aW9ucywgUGx1Z2luRXZlbnRUeXBlIH0gZnJvbSBcIi4uL3R5cGVzLmpzXCI7XG5pbXBvcnQgeyByZXNvbHZlT3B0aW9ucyB9IGZyb20gXCIuLi9jb25maWcvcmVzb2x2ZU9wdGlvbnMuanNcIjtcbmltcG9ydCB7IGdldEJ1bmRsZU1hbmlmZXN0IH0gZnJvbSBcIi4uL2hlbHBlcnMvZ2V0QnVuZGxlTWFuaWZlc3QuanNcIjtcbmltcG9ydCB7XG4gIGFkZFNlcnZlck1hbmlmZXN0LFxuICB1cGRhdGVTaGFyZWRNYW5pZmVzdCxcbiAgc2lnbmFsU2VydmVyTWFuaWZlc3RSZWFkeSxcbn0gZnJvbSBcIi4uL2J1bmRsZS9tYW5pZmVzdHMuanNcIjtcbmltcG9ydCB7IGhhbmRsZUVycm9yIH0gZnJvbSBcIi4uL2Vycm9yL2hhbmRsZUVycm9yLmpzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVCdWlsZEV2ZW50UGx1Z2luKG9wdGlvbnM6IFN0cmVhbVBsdWdpbk9wdGlvbnMpOiBQbHVnaW4ge1xuICByZXR1cm4ge1xuICAgIG5hbWU6IFwidml0ZTpwbHVnaW4tcmVhY3Qtc2VydmVyOmJ1aWxkLWV2ZW50c1wiLFxuICAgIGVuZm9yY2U6IFwicG9zdFwiLFxuICAgIGFwcGx5OiBcImJ1aWxkXCIsXG5cbiAgICB3cml0ZUJ1bmRsZShvdXRwdXRPcHRpb25zLCBidW5kbGUpIHtcbiAgICAgIGNvbnN0IHJlc29sdmVkT3B0aW9uc1Jlc3VsdCA9IHJlc29sdmVPcHRpb25zKG9wdGlvbnMpO1xuICAgICAgaWYgKHJlc29sdmVkT3B0aW9uc1Jlc3VsdC50eXBlID09PSBcImVycm9yXCIpIHtcbiAgICAgICAgXG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHVzZXJPcHRpb25zID0gcmVzb2x2ZWRPcHRpb25zUmVzdWx0LnVzZXJPcHRpb25zO1xuXG4gICAgICBjb25zdCBlbnZpcm9ubWVudE5hbWUgPSB0aGlzLmVudmlyb25tZW50Py5uYW1lO1xuXG5cbiAgICAgIC8vIERldGVybWluZSBldmVudCB0eXBlIGJhc2VkIG9uIGVudmlyb25tZW50IG5hbWVcbiAgICAgIGxldCBldmVudFR5cGU6IFBsdWdpbkV2ZW50VHlwZSB8IHVuZGVmaW5lZDtcblxuXG4gICAgICBpZiAoZW52aXJvbm1lbnROYW1lPy5zdGFydHNXaXRoKFwiY2xpZW50XCIpKSB7XG4gICAgICAgIGV2ZW50VHlwZSA9IFwiYnVpbGQud3JpdGVCdW5kbGUuY2xpZW50XCI7XG5cbiAgICAgIH0gZWxzZSBpZiAoZW52aXJvbm1lbnROYW1lPy5zdGFydHNXaXRoKFwic3NyXCIpKSB7XG4gICAgICAgIGV2ZW50VHlwZSA9IFwiYnVpbGQud3JpdGVCdW5kbGUuc3RhdGljXCI7XG4gICAgICB9IGVsc2UgaWYgKGVudmlyb25tZW50TmFtZT8uc3RhcnRzV2l0aChcInNlcnZlclwiKSkge1xuICAgICAgICBldmVudFR5cGUgPSBcImJ1aWxkLndyaXRlQnVuZGxlLnNlcnZlclwiO1xuICAgICAgfVxuXG4gICAgICAvLyBTdG9yZSBzZXJ2ZXIgbWFuaWZlc3QgaW4gZ2xvYmFsIHN0b3JlIGZvciBTU0cgcGx1Z2luIGFjY2Vzc1xuICAgICAgaWYgKGVudmlyb25tZW50TmFtZT8uc3RhcnRzV2l0aChcInNlcnZlclwiKSkge1xuICAgICAgICB0cnkge1xuICAgICAgICAgIGNvbnN0IGJ1bmRsZU1hbmlmZXN0ID0gZ2V0QnVuZGxlTWFuaWZlc3Qoe1xuICAgICAgICAgICAgYnVuZGxlLFxuICAgICAgICAgICAgbm9ybWFsaXplcjogdXNlck9wdGlvbnMubm9ybWFsaXplcixcbiAgICAgICAgICB9KTtcbiAgICAgICAgICAvLyBUeXBlIGFzc2VydGlvbiBzaW5jZSBnZXRCdW5kbGVNYW5pZmVzdCByZXR1cm5zIHRoZSBjb3JyZWN0IHN0cnVjdHVyZVxuICAgICAgICAgIGFkZFNlcnZlck1hbmlmZXN0KGJ1bmRsZU1hbmlmZXN0IGFzIGFueSk7XG5cbiAgICAgICAgICAvLyBBbHNvIHVwZGF0ZSB0aGUgc2hhcmVkIHN0YXRlIGJldHdlZW4gZW52aXJvbm1lbnRzXG4gICAgICAgICAgdXBkYXRlU2hhcmVkTWFuaWZlc3QodGhpcywgXCJzZXJ2ZXJcIiwgYnVuZGxlTWFuaWZlc3QgYXMgYW55KTtcbiAgICAgICAgICBcbiAgICAgICAgICAvLyBTaWduYWwgdGhhdCBzZXJ2ZXIgbWFuaWZlc3QgaXMgcmVhZHkgZm9yIHdhaXRpbmcgY29uc3VtZXJzXG4gICAgICAgICAgc2lnbmFsU2VydmVyTWFuaWZlc3RSZWFkeShidW5kbGVNYW5pZmVzdCBhcyBhbnkpO1xuXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgICAgY29uc3QgZXZlbnRQYW5pY0Vycm9yID0gaGFuZGxlRXJyb3Ioe1xuICAgICAgICAgICAgZXJyb3IsXG4gICAgICAgICAgICBwYW5pY1RocmVzaG9sZDogdXNlck9wdGlvbnMucGFuaWNUaHJlc2hvbGQsXG4gICAgICAgICAgICBjb250ZXh0OiBgd3JpdGVCdW5kbGUoc2VydmVyIG1hbmlmZXN0KWAsXG4gICAgICAgICAgfSk7XG4gICAgICAgICAgaWYgKGV2ZW50UGFuaWNFcnJvciAhPSBudWxsKSB7XG4gICAgICAgICAgICB0aGlzLmVycm9yKGV2ZW50UGFuaWNFcnJvcik7IC8vIFJlLXRocm93IHRvIGFib3J0IHRoZSBidWlsZFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndhcm4oZXJyb3IgYXMgYW55KTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgaWYgKGV2ZW50VHlwZSAmJiB1c2VyT3B0aW9ucy5vbkV2ZW50KSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgY29uc3QgcmVzdWx0ID0gdXNlck9wdGlvbnMub25FdmVudCh7XG4gICAgICAgICAgICB0eXBlOiBldmVudFR5cGUsXG4gICAgICAgICAgICBkYXRhOiB7XG4gICAgICAgICAgICAgIHBhZ2VzOiBbXSxcbiAgICAgICAgICAgICAgb3B0aW9uczogb3V0cHV0T3B0aW9ucyxcbiAgICAgICAgICAgICAgYnVuZGxlLFxuICAgICAgICAgICAgfSxcbiAgICAgICAgICB9IGFzIGFueSk7IC8vIFR5cGUgYXNzZXJ0aW9uIHRvIGF2b2lkIGNvbXBsZXggdHlwZSBjaGVja2luZ1xuXG4gICAgICAgICAgLy8gSGFuZGxlIGFzeW5jIGV2ZW50IGNhbGxiYWNrc1xuICAgICAgICAgIGlmIChcbiAgICAgICAgICAgIHJlc3VsdCAhPSBudWxsICYmXG4gICAgICAgICAgICB0eXBlb2YgcmVzdWx0ID09PSBcIm9iamVjdFwiICYmXG4gICAgICAgICAgICBcInRoZW5cIiBpbiByZXN1bHRcbiAgICAgICAgICApIHtcbiAgICAgICAgICAgIChyZXN1bHQgYXMgUHJvbWlzZTxhbnk+KS5jYXRjaCgoZXJyb3IpID0+IHtcbiAgICAgICAgICAgICAgY29uc3QgZXZlbnRQYW5pY0Vycm9yID0gaGFuZGxlRXJyb3Ioe1xuICAgICAgICAgICAgICAgIGVycm9yLFxuICAgICAgICAgICAgICAgIHBhbmljVGhyZXNob2xkOiB1c2VyT3B0aW9ucy5wYW5pY1RocmVzaG9sZCxcbiAgICAgICAgICAgICAgICBjb250ZXh0OiBgb25FdmVudCgke2V2ZW50VHlwZX0pYCxcbiAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgIGlmIChldmVudFBhbmljRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHRocm93IGV2ZW50UGFuaWNFcnJvcjsgLy8gUmUtdGhyb3cgdG8gYWJvcnQgdGhlIGJ1aWxkXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgIH1cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICBjb25zdCBldmVudFBhbmljRXJyb3IgPSBoYW5kbGVFcnJvcih7XG4gICAgICAgICAgICBlcnJvcixcbiAgICAgICAgICAgIHBhbmljVGhyZXNob2xkOiB1c2VyT3B0aW9ucy5wYW5pY1RocmVzaG9sZCxcbiAgICAgICAgICAgIGNvbnRleHQ6IGBvbkV2ZW50KCR7ZXZlbnRUeXBlfSlgLFxuICAgICAgICAgIH0pO1xuICAgICAgICAgIGlmIChldmVudFBhbmljRXJyb3IgIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5lcnJvcihldmVudFBhbmljRXJyb3IpOyAvLyBMb2cgdGhlIGVycm9yXG4gICAgICAgICAgICB0aHJvdyBldmVudFBhbmljRXJyb3I7IC8vIFJlLXRocm93IHRvIGFib3J0IHRoZSBidWlsZFxuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLndhcm4oZXJyb3IgYXMgYW55KTtcbiAgICAgICAgICAgIC8vIEZvciBub24tcGFuaWMgZXJyb3JzLCBkb24ndCB0aHJvdyAtIGp1c3Qgd2FyblxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH0sXG4gIH07XG59XG4iXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7OztBQVdPLFNBQVMsdUJBQXVCLE9BQXNDLEVBQUE7QUFDM0UsRUFBTyxPQUFBO0FBQUEsSUFDTCxJQUFNLEVBQUEsdUNBQUE7QUFBQSxJQUNOLE9BQVMsRUFBQSxNQUFBO0FBQUEsSUFDVCxLQUFPLEVBQUEsT0FBQTtBQUFBLElBRVAsV0FBQSxDQUFZLGVBQWUsTUFBUSxFQUFBO0FBQ2pDLE1BQU0sTUFBQSxxQkFBQSxHQUF3QixlQUFlLE9BQU8sQ0FBQTtBQUNwRCxNQUFJLElBQUEscUJBQUEsQ0FBc0IsU0FBUyxPQUFTLEVBQUE7QUFFMUMsUUFBQTtBQUFBO0FBRUYsTUFBQSxNQUFNLGNBQWMscUJBQXNCLENBQUEsV0FBQTtBQUUxQyxNQUFNLE1BQUEsZUFBQSxHQUFrQixLQUFLLFdBQWEsRUFBQSxJQUFBO0FBSTFDLE1BQUksSUFBQSxTQUFBO0FBR0osTUFBSSxJQUFBLGVBQUEsRUFBaUIsVUFBVyxDQUFBLFFBQVEsQ0FBRyxFQUFBO0FBQ3pDLFFBQVksU0FBQSxHQUFBLDBCQUFBO0FBQUEsT0FFSCxNQUFBLElBQUEsZUFBQSxFQUFpQixVQUFXLENBQUEsS0FBSyxDQUFHLEVBQUE7QUFDN0MsUUFBWSxTQUFBLEdBQUEsMEJBQUE7QUFBQSxPQUNILE1BQUEsSUFBQSxlQUFBLEVBQWlCLFVBQVcsQ0FBQSxRQUFRLENBQUcsRUFBQTtBQUNoRCxRQUFZLFNBQUEsR0FBQSwwQkFBQTtBQUFBO0FBSWQsTUFBSSxJQUFBLGVBQUEsRUFBaUIsVUFBVyxDQUFBLFFBQVEsQ0FBRyxFQUFBO0FBQ3pDLFFBQUksSUFBQTtBQUNGLFVBQUEsTUFBTSxpQkFBaUIsaUJBQWtCLENBQUE7QUFBQSxZQUN2QyxNQUFBO0FBQUEsWUFDQSxZQUFZLFdBQVksQ0FBQTtBQUFBLFdBQ3pCLENBQUE7QUFFRCxVQUFBLGlCQUFBLENBQWtCLGNBQXFCLENBQUE7QUFHdkMsVUFBcUIsb0JBQUEsQ0FBQSxJQUFBLEVBQU0sVUFBVSxjQUFxQixDQUFBO0FBRzFELFVBQUEseUJBQUEsQ0FBMEIsY0FBcUIsQ0FBQTtBQUFBLGlCQUV4QyxLQUFPLEVBQUE7QUFDZCxVQUFBLE1BQU0sa0JBQWtCLFdBQVksQ0FBQTtBQUFBLFlBQ2xDLEtBQUE7QUFBQSxZQUNBLGdCQUFnQixXQUFZLENBQUEsY0FFOUIsQ0FBQyxDQUFBO0FBQ0QsVUFBQSxJQUFJLG1CQUFtQixJQUFNLEVBQUE7QUFDM0IsWUFBQSxJQUFBLENBQUssTUFBTSxlQUFlLENBQUE7QUFBQSxXQUNyQixNQUFBO0FBQ0wsWUFBQSxJQUFBLENBQUssS0FBSyxLQUFZLENBQUE7QUFBQTtBQUN4QjtBQUNGO0FBR0YsTUFBSSxJQUFBLFNBQUEsSUFBYSxZQUFZLE9BQVMsRUFBQTtBQUNwQyxRQUFJLElBQUE7QUFDRixVQUFNLE1BQUEsTUFBQSxHQUFTLFlBQVksT0FBUSxDQUFBO0FBQUEsWUFDakMsSUFBTSxFQUFBLFNBQUE7QUFBQSxZQUNOLElBQU0sRUFBQTtBQUFBLGNBQ0osT0FBTyxFQUFDO0FBQUEsY0FDUixPQUFTLEVBQUEsYUFBQTtBQUFBLGNBQ1Q7QUFBQTtBQUNGLFdBQ00sQ0FBQTtBQUdSLFVBQUEsSUFDRSxVQUFVLElBQ1YsSUFBQSxPQUFPLE1BQVcsS0FBQSxRQUFBLElBQ2xCLFVBQVUsTUFDVixFQUFBO0FBQ0EsWUFBQyxNQUFBLENBQXdCLEtBQU0sQ0FBQSxDQUFDLEtBQVUsS0FBQTtBQUN4QyxjQUFBLE1BQU0sa0JBQWtCLFdBQVksQ0FBQTtBQUFBLGdCQUNsQyxLQUFBO0FBQUEsZ0JBQ0EsZ0JBQWdCLFdBQVksQ0FBQSxjQUFBO0FBQUEsZ0JBQzVCLE9BQUEsRUFBUyxXQUFXLFNBQVMsQ0FBQSxDQUFBO0FBQUEsZUFDOUIsQ0FBQTtBQUNELGNBQUEsSUFBSSxtQkFBbUIsSUFBTSxFQUFBO0FBQzNCLGdCQUFNLE1BQUEsZUFBQTtBQUFBO0FBQ1IsYUFDRCxDQUFBO0FBQUE7QUFDSCxpQkFDTyxLQUFPLEVBQUE7QUFDZCxVQUFBLE1BQU0sa0JBQWtCLFdBQVksQ0FBQTtBQUFBLFlBQ2xDLEtBQUE7QUFBQSxZQUNBLGdCQUFnQixXQUFZLENBQUEsY0FFOUIsQ0FBQyxDQUFBO0FBQ0QsVUFBQSxJQUFJLG1CQUFtQixJQUFNLEVBQUE7QUFDM0IsWUFBQSxJQUFBLENBQUssTUFBTSxlQUFlLENBQUE7QUFDMUIsWUFBTSxNQUFBLGVBQUE7QUFBQSxXQUNELE1BQUE7QUFDTCxZQUFBLElBQUEsQ0FBSyxLQUFLLEtBQVksQ0FBQTtBQUFBO0FBRXhCO0FBQ0Y7QUFDRjtBQUNGLEdBQ0Y7QUFDRjs7OzsifQ==