@jsenv/plugin-react 0.0.1

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 (164) hide show
  1. package/main.js +1 -0
  2. package/package.json +39 -0
  3. package/script/test/test.mjs +14 -0
  4. package/src/client/react_refresh.js +33 -0
  5. package/src/client/react_refresh_preamble.js +22 -0
  6. package/src/jsenv_plugin_react.js +190 -0
  7. package/src/jsenv_plugin_react_refresh_preamble.js +39 -0
  8. package/test/react_build/client/.jsenv/build/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js +2438 -0
  9. package/test/react_build/client/.jsenv/build/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.js +1332 -0
  10. package/test/react_build/client/.jsenv/build/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js +27173 -0
  11. package/test/react_build/client/.jsenv/build/app.jsx +6 -0
  12. package/test/react_build/client/.jsenv/build/main.html +15 -0
  13. package/test/react_build/client/.jsenv/build/main.html@L14-L16.js +1 -0
  14. package/test/react_build/client/.jsenv/build/main.html@L8-L12.js +3 -0
  15. package/test/react_build/client/.jsenv/build/main.jsx +22 -0
  16. package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js +2482 -0
  17. package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js__compile_info__.json +22 -0
  18. package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.map +1 -0
  19. package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.js +1347 -0
  20. package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.js__compile_info__.json +22 -0
  21. package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.map +1 -0
  22. package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js +27410 -0
  23. package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js__compile_info__.json +38 -0
  24. package/test/react_build/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.map +1 -0
  25. package/test/react_build/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/test/react_build/dist/js/app.es5.js +17 -0
  26. package/test/react_build/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/test/react_build/dist/js/main.es5.js +30944 -0
  27. package/test/react_build/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/test/react_build/dist/js/main.html@L14-L16.es5.js +10 -0
  28. package/test/react_build/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/test/react_build/dist/js/s.js +777 -0
  29. package/test/react_build/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/test/react_build/dist/main.html +25 -0
  30. package/test/react_build/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/test/react_build/dist/main.html@L8-L12.js +3 -0
  31. package/test/react_build/client/app.jsx +3 -0
  32. package/test/react_build/client/main.html +20 -0
  33. package/test/react_build/client/main.jsx +9 -0
  34. package/test/react_build/dist/asset-manifest.json +8 -0
  35. package/test/react_build/dist/js/app.es5.js +17 -0
  36. package/test/react_build/dist/js/main.es5.js +30944 -0
  37. package/test/react_build/dist/js/s.js +777 -0
  38. package/test/react_build/dist/main.html +35 -0
  39. package/test/react_build/react_build.test.mjs +57 -0
  40. package/test/react_refresh/client/.jsenv/build/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js +2438 -0
  41. package/test/react_refresh/client/.jsenv/build/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.js +1332 -0
  42. package/test/react_refresh/client/.jsenv/build/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js +27165 -0
  43. package/test/react_refresh/client/.jsenv/build/app.jsx +24 -0
  44. package/test/react_refresh/client/.jsenv/build/index.html +12 -0
  45. package/test/react_refresh/client/.jsenv/build/main.jsx +8 -0
  46. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js +2482 -0
  47. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js__compile_info__.json +21 -0
  48. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.map +1 -0
  49. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-dev-runtime.js +1328 -0
  50. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-dev-runtime.js__compile_info__.json +21 -0
  51. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-dev-runtime.map +1 -0
  52. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.js +1347 -0
  53. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.js__compile_info__.json +22 -0
  54. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-runtime.map +1 -0
  55. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js +27410 -0
  56. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js__compile_info__.json +37 -0
  57. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.map +1 -0
  58. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-refresh/runtime.js +694 -0
  59. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-refresh/runtime.js__compile_info__.json +17 -0
  60. package/test/react_refresh/client/.jsenv/cjs_to_esm/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-refresh/runtime.map +1 -0
  61. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/plugin-preact/src/client/preact_refresh.js +38 -0
  62. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/plugin-preact/src/client/preact_refresh.js.map +9 -0
  63. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/plugin-react/src/client/react_refresh.js +35 -0
  64. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/plugin-react/src/client/react_refresh.js.map +27 -0
  65. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/index.js +3 -0
  66. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/index.js.map +9 -0
  67. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/decompose.js +405 -0
  68. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/decompose.js.map +9 -0
  69. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/escapeString.js +28 -0
  70. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/escapeString.js.map +19 -0
  71. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/global-value-path.js +60 -0
  72. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/global-value-path.js.map +9 -0
  73. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/isComposite.js +18 -0
  74. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/isComposite.js.map +12 -0
  75. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/sortRecipe.js +76 -0
  76. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/internal/sortRecipe.js.map +31 -0
  77. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/uneval.js +212 -0
  78. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/uneval/src/uneval.js.map +9 -0
  79. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/utils/event_source/event_source.js +197 -0
  80. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/utils/event_source/event_source.js.map +71 -0
  81. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/utils/html_ast/html_attribute_src_set.js +19 -0
  82. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@jsenv/utils/html_ast/html_attribute_src_set.js.map +23 -0
  83. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/computeKey.js +38 -0
  84. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/computeKey.js.map +9 -0
  85. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/constants.js +13 -0
  86. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/constants.js.map +22 -0
  87. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/index.js +206 -0
  88. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/index.js.map +9 -0
  89. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/catchError.js +17 -0
  90. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/catchError.js.map +9 -0
  91. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/debounceRendering.js +21 -0
  92. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/debounceRendering.js.map +9 -0
  93. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/signaturesForType.js +2 -0
  94. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/signaturesForType.js.map +11 -0
  95. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/unmount.js +20 -0
  96. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/unmount.js.map +9 -0
  97. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/vnode.js +46 -0
  98. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/vnode.js.map +9 -0
  99. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/vnodesForComponent.js +3 -0
  100. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/core/src/runtime/vnodesForComponent.js.map +12 -0
  101. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/utils/src/index.js +43 -0
  102. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/@prefresh/utils/src/index.js.map +33 -0
  103. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/compat/dist/compat.module.js +408 -0
  104. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/compat/dist/compat.module.js.map +229 -0
  105. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/debug/dist/debug.module.js +2 -0
  106. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/debug/dist/debug.module.js.map +135 -0
  107. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/devtools/dist/devtools.module.js +2 -0
  108. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/devtools/dist/devtools.module.js.map +20 -0
  109. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/dist/preact.module.js +2 -0
  110. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/dist/preact.module.js.map +231 -0
  111. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/hooks/dist/hooks.module.js +167 -0
  112. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/hooks/dist/hooks.module.js.map +100 -0
  113. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js +2 -0
  114. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/preact/jsx-runtime/dist/jsxRuntime.module.js.map +24 -0
  115. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js +2484 -0
  116. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/index.js.map +19 -0
  117. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-dev-runtime.js +1330 -0
  118. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react/jsx-dev-runtime.js.map +13 -0
  119. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js +27412 -0
  120. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-dom/index.js.map +19 -0
  121. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-refresh/runtime.js +696 -0
  122. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/node_modules/react-refresh/runtime.js.map +16 -0
  123. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/src/client/react_refresh.js +35 -0
  124. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/src/client/react_refresh.js.map +9 -0
  125. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/src/client/react_refresh_preamble.js +24 -0
  126. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/packages/jsenv-plugin-react/src/client/react_refresh_preamble.js.map +9 -0
  127. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/autoreload_preference.js +11 -0
  128. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/autoreload_preference.js.map +16 -0
  129. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/event_source_client.js +188 -0
  130. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/event_source_client.js.map +9 -0
  131. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/reload.js +103 -0
  132. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/reload.js.map +9 -0
  133. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/url_helpers.js +20 -0
  134. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/autoreload/dev_sse/client/url_helpers.js.map +26 -0
  135. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/error_in_document.js +198 -0
  136. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/error_in_document.js.map +70 -0
  137. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/error_in_notification.js +21 -0
  138. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/error_in_notification.js.map +23 -0
  139. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/html_supervisor_installer.js +171 -0
  140. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/html_supervisor_installer.js.map +9 -0
  141. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/html_supervisor_setup.js +77 -0
  142. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/uneval_exception.js +10 -0
  143. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/html_supervisor/client/uneval_exception.js.map +9 -0
  144. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/import_meta_hot/client/import_meta_hot.js +82 -0
  145. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/@fs/Users/d.maillard/dev/jsenv/jsenv-core/src/plugins/import_meta_hot/client/import_meta_hot.js.map +38 -0
  146. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/app.jsx +58 -0
  147. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/app.jsx.map +16 -0
  148. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/count_label.jsx +29 -0
  149. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/count_label.jsx.map +13 -0
  150. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/main.html +26 -0
  151. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/main.html@L3-L8.js +7 -0
  152. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/main.html@L3-L8.js.map +12 -0
  153. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/main.html@L9-L11.js +4 -0
  154. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/main.html@L9-L11.js.map +12 -0
  155. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/main.jsx +16 -0
  156. package/test/react_refresh/client/.jsenv/dev/chrome@101.00/main.jsx.map +18 -0
  157. package/test/react_refresh/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/test/dev_server/react_and_autoreload/dist/index.html +12 -0
  158. package/test/react_refresh/client/.jsenv/postbuild/@fs/Users/d.maillard/dev/jsenv/jsenv-core/test/dev_server/react_and_autoreload/dist/js/main.js +30952 -0
  159. package/test/react_refresh/client/app.jsx +29 -0
  160. package/test/react_refresh/client/count_label.jsx +7 -0
  161. package/test/react_refresh/client/main.html +13 -0
  162. package/test/react_refresh/client/main.jsx +8 -0
  163. package/test/react_refresh/react_refresh.test.mjs +93 -0
  164. package/test/react_refresh/react_refresh.test_manual.mjs +26 -0
@@ -0,0 +1,696 @@
1
+ function getDefaultExportFromCjs (x) {
2
+ return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
3
+ }
4
+
5
+ var runtime = {exports: {}};
6
+
7
+ var reactRefreshRuntime_development = {};
8
+
9
+ /**
10
+ * @license React
11
+ * react-refresh-runtime.development.js
12
+ *
13
+ * Copyright (c) Facebook, Inc. and its affiliates.
14
+ *
15
+ * This source code is licensed under the MIT license found in the
16
+ * LICENSE file in the root directory of this source tree.
17
+ */
18
+
19
+ var hasRequiredReactRefreshRuntime_development;
20
+
21
+ function requireReactRefreshRuntime_development () {
22
+ if (hasRequiredReactRefreshRuntime_development) return reactRefreshRuntime_development;
23
+ hasRequiredReactRefreshRuntime_development = 1;
24
+
25
+ {
26
+ (function() {
27
+
28
+ // ATTENTION
29
+ var REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');
30
+ var REACT_MEMO_TYPE = Symbol.for('react.memo');
31
+
32
+ var PossiblyWeakMap = typeof WeakMap === 'function' ? WeakMap : Map; // We never remove these associations.
33
+ // It's OK to reference families, but use WeakMap/Set for types.
34
+
35
+ var allFamiliesByID = new Map();
36
+ var allFamiliesByType = new PossiblyWeakMap();
37
+ var allSignaturesByType = new PossiblyWeakMap(); // This WeakMap is read by React, so we only put families
38
+ // that have actually been edited here. This keeps checks fast.
39
+ // $FlowIssue
40
+
41
+ var updatedFamiliesByType = new PossiblyWeakMap(); // This is cleared on every performReactRefresh() call.
42
+ // It is an array of [Family, NextType] tuples.
43
+
44
+ var pendingUpdates = []; // This is injected by the renderer via DevTools globalThis hook.
45
+
46
+ var helpersByRendererID = new Map();
47
+ var helpersByRoot = new Map(); // We keep track of mounted roots so we can schedule updates.
48
+
49
+ var mountedRoots = new Set(); // If a root captures an error, we remember it so we can retry on edit.
50
+
51
+ var failedRoots = new Set(); // In environments that support WeakMap, we also remember the last element for every root.
52
+ // It needs to be weak because we do this even for roots that failed to mount.
53
+ // If there is no WeakMap, we won't attempt to do retrying.
54
+ // $FlowIssue
55
+
56
+ var rootElements = // $FlowIssue
57
+ typeof WeakMap === 'function' ? new WeakMap() : null;
58
+ var isPerformingRefresh = false;
59
+
60
+ function computeFullKey(signature) {
61
+ if (signature.fullKey !== null) {
62
+ return signature.fullKey;
63
+ }
64
+
65
+ var fullKey = signature.ownKey;
66
+ var hooks;
67
+
68
+ try {
69
+ hooks = signature.getCustomHooks();
70
+ } catch (err) {
71
+ // This can happen in an edge case, e.g. if expression like Foo.useSomething
72
+ // depends on Foo which is lazily initialized during rendering.
73
+ // In that case just assume we'll have to remount.
74
+ signature.forceReset = true;
75
+ signature.fullKey = fullKey;
76
+ return fullKey;
77
+ }
78
+
79
+ for (var i = 0; i < hooks.length; i++) {
80
+ var hook = hooks[i];
81
+
82
+ if (typeof hook !== 'function') {
83
+ // Something's wrong. Assume we need to remount.
84
+ signature.forceReset = true;
85
+ signature.fullKey = fullKey;
86
+ return fullKey;
87
+ }
88
+
89
+ var nestedHookSignature = allSignaturesByType.get(hook);
90
+
91
+ if (nestedHookSignature === undefined) {
92
+ // No signature means Hook wasn't in the source code, e.g. in a library.
93
+ // We'll skip it because we can assume it won't change during this session.
94
+ continue;
95
+ }
96
+
97
+ var nestedHookKey = computeFullKey(nestedHookSignature);
98
+
99
+ if (nestedHookSignature.forceReset) {
100
+ signature.forceReset = true;
101
+ }
102
+
103
+ fullKey += '\n---\n' + nestedHookKey;
104
+ }
105
+
106
+ signature.fullKey = fullKey;
107
+ return fullKey;
108
+ }
109
+
110
+ function haveEqualSignatures(prevType, nextType) {
111
+ var prevSignature = allSignaturesByType.get(prevType);
112
+ var nextSignature = allSignaturesByType.get(nextType);
113
+
114
+ if (prevSignature === undefined && nextSignature === undefined) {
115
+ return true;
116
+ }
117
+
118
+ if (prevSignature === undefined || nextSignature === undefined) {
119
+ return false;
120
+ }
121
+
122
+ if (computeFullKey(prevSignature) !== computeFullKey(nextSignature)) {
123
+ return false;
124
+ }
125
+
126
+ if (nextSignature.forceReset) {
127
+ return false;
128
+ }
129
+
130
+ return true;
131
+ }
132
+
133
+ function isReactClass(type) {
134
+ return type.prototype && type.prototype.isReactComponent;
135
+ }
136
+
137
+ function canPreserveStateBetween(prevType, nextType) {
138
+ if (isReactClass(prevType) || isReactClass(nextType)) {
139
+ return false;
140
+ }
141
+
142
+ if (haveEqualSignatures(prevType, nextType)) {
143
+ return true;
144
+ }
145
+
146
+ return false;
147
+ }
148
+
149
+ function resolveFamily(type) {
150
+ // Only check updated types to keep lookups fast.
151
+ return updatedFamiliesByType.get(type);
152
+ } // If we didn't care about IE11, we could use new Map/Set(iterable).
153
+
154
+
155
+ function cloneMap(map) {
156
+ var clone = new Map();
157
+ map.forEach(function (value, key) {
158
+ clone.set(key, value);
159
+ });
160
+ return clone;
161
+ }
162
+
163
+ function cloneSet(set) {
164
+ var clone = new Set();
165
+ set.forEach(function (value) {
166
+ clone.add(value);
167
+ });
168
+ return clone;
169
+ } // This is a safety mechanism to protect against rogue getters and Proxies.
170
+
171
+
172
+ function getProperty(object, property) {
173
+ try {
174
+ return object[property];
175
+ } catch (err) {
176
+ // Intentionally ignore.
177
+ return undefined;
178
+ }
179
+ }
180
+
181
+ function performReactRefresh() {
182
+
183
+ if (pendingUpdates.length === 0) {
184
+ return null;
185
+ }
186
+
187
+ if (isPerformingRefresh) {
188
+ return null;
189
+ }
190
+
191
+ isPerformingRefresh = true;
192
+
193
+ try {
194
+ var staleFamilies = new Set();
195
+ var updatedFamilies = new Set();
196
+ var updates = pendingUpdates;
197
+ pendingUpdates = [];
198
+ updates.forEach(function (_ref) {
199
+ var family = _ref[0],
200
+ nextType = _ref[1];
201
+ // Now that we got a real edit, we can create associations
202
+ // that will be read by the React reconciler.
203
+ var prevType = family.current;
204
+ updatedFamiliesByType.set(prevType, family);
205
+ updatedFamiliesByType.set(nextType, family);
206
+ family.current = nextType; // Determine whether this should be a re-render or a re-mount.
207
+
208
+ if (canPreserveStateBetween(prevType, nextType)) {
209
+ updatedFamilies.add(family);
210
+ } else {
211
+ staleFamilies.add(family);
212
+ }
213
+ }); // TODO: rename these fields to something more meaningful.
214
+
215
+ var update = {
216
+ updatedFamilies: updatedFamilies,
217
+ // Families that will re-render preserving state
218
+ staleFamilies: staleFamilies // Families that will be remounted
219
+
220
+ };
221
+ helpersByRendererID.forEach(function (helpers) {
222
+ // Even if there are no roots, set the handler on first update.
223
+ // This ensures that if *new* roots are mounted, they'll use the resolve handler.
224
+ helpers.setRefreshHandler(resolveFamily);
225
+ });
226
+ var didError = false;
227
+ var firstError = null; // We snapshot maps and sets that are mutated during commits.
228
+ // If we don't do this, there is a risk they will be mutated while
229
+ // we iterate over them. For example, trying to recover a failed root
230
+ // may cause another root to be added to the failed list -- an infinite loop.
231
+
232
+ var failedRootsSnapshot = cloneSet(failedRoots);
233
+ var mountedRootsSnapshot = cloneSet(mountedRoots);
234
+ var helpersByRootSnapshot = cloneMap(helpersByRoot);
235
+ failedRootsSnapshot.forEach(function (root) {
236
+ var helpers = helpersByRootSnapshot.get(root);
237
+
238
+ if (helpers === undefined) {
239
+ throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');
240
+ }
241
+
242
+ if (!failedRoots.has(root)) {// No longer failed.
243
+ }
244
+
245
+ if (rootElements === null) {
246
+ return;
247
+ }
248
+
249
+ if (!rootElements.has(root)) {
250
+ return;
251
+ }
252
+
253
+ var element = rootElements.get(root);
254
+
255
+ try {
256
+ helpers.scheduleRoot(root, element);
257
+ } catch (err) {
258
+ if (!didError) {
259
+ didError = true;
260
+ firstError = err;
261
+ } // Keep trying other roots.
262
+
263
+ }
264
+ });
265
+ mountedRootsSnapshot.forEach(function (root) {
266
+ var helpers = helpersByRootSnapshot.get(root);
267
+
268
+ if (helpers === undefined) {
269
+ throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');
270
+ }
271
+
272
+ if (!mountedRoots.has(root)) {// No longer mounted.
273
+ }
274
+
275
+ try {
276
+ helpers.scheduleRefresh(root, update);
277
+ } catch (err) {
278
+ if (!didError) {
279
+ didError = true;
280
+ firstError = err;
281
+ } // Keep trying other roots.
282
+
283
+ }
284
+ });
285
+
286
+ if (didError) {
287
+ throw firstError;
288
+ }
289
+
290
+ return update;
291
+ } finally {
292
+ isPerformingRefresh = false;
293
+ }
294
+ }
295
+ function register(type, id) {
296
+ {
297
+ if (type === null) {
298
+ return;
299
+ }
300
+
301
+ if (typeof type !== 'function' && typeof type !== 'object') {
302
+ return;
303
+ } // This can happen in an edge case, e.g. if we register
304
+ // return value of a HOC but it returns a cached component.
305
+ // Ignore anything but the first registration for each type.
306
+
307
+
308
+ if (allFamiliesByType.has(type)) {
309
+ return;
310
+ } // Create family or remember to update it.
311
+ // None of this bookkeeping affects reconciliation
312
+ // until the first performReactRefresh() call above.
313
+
314
+
315
+ var family = allFamiliesByID.get(id);
316
+
317
+ if (family === undefined) {
318
+ family = {
319
+ current: type
320
+ };
321
+ allFamiliesByID.set(id, family);
322
+ } else {
323
+ pendingUpdates.push([family, type]);
324
+ }
325
+
326
+ allFamiliesByType.set(type, family); // Visit inner types because we might not have registered them.
327
+
328
+ if (typeof type === 'object' && type !== null) {
329
+ switch (getProperty(type, '$$typeof')) {
330
+ case REACT_FORWARD_REF_TYPE:
331
+ register(type.render, id + '$render');
332
+ break;
333
+
334
+ case REACT_MEMO_TYPE:
335
+ register(type.type, id + '$type');
336
+ break;
337
+ }
338
+ }
339
+ }
340
+ }
341
+ function setSignature(type, key) {
342
+ var forceReset = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
343
+ var getCustomHooks = arguments.length > 3 ? arguments[3] : undefined;
344
+
345
+ {
346
+ if (!allSignaturesByType.has(type)) {
347
+ allSignaturesByType.set(type, {
348
+ forceReset: forceReset,
349
+ ownKey: key,
350
+ fullKey: null,
351
+ getCustomHooks: getCustomHooks || function () {
352
+ return [];
353
+ }
354
+ });
355
+ } // Visit inner types because we might not have signed them.
356
+
357
+
358
+ if (typeof type === 'object' && type !== null) {
359
+ switch (getProperty(type, '$$typeof')) {
360
+ case REACT_FORWARD_REF_TYPE:
361
+ setSignature(type.render, key, forceReset, getCustomHooks);
362
+ break;
363
+
364
+ case REACT_MEMO_TYPE:
365
+ setSignature(type.type, key, forceReset, getCustomHooks);
366
+ break;
367
+ }
368
+ }
369
+ }
370
+ } // This is lazily called during first render for a type.
371
+ // It captures Hook list at that time so inline requires don't break comparisons.
372
+
373
+ function collectCustomHooksForSignature(type) {
374
+ {
375
+ var signature = allSignaturesByType.get(type);
376
+
377
+ if (signature !== undefined) {
378
+ computeFullKey(signature);
379
+ }
380
+ }
381
+ }
382
+ function getFamilyByID(id) {
383
+ {
384
+ return allFamiliesByID.get(id);
385
+ }
386
+ }
387
+ function getFamilyByType(type) {
388
+ {
389
+ return allFamiliesByType.get(type);
390
+ }
391
+ }
392
+ function findAffectedHostInstances(families) {
393
+ {
394
+ var affectedInstances = new Set();
395
+ mountedRoots.forEach(function (root) {
396
+ var helpers = helpersByRoot.get(root);
397
+
398
+ if (helpers === undefined) {
399
+ throw new Error('Could not find helpers for a root. This is a bug in React Refresh.');
400
+ }
401
+
402
+ var instancesForRoot = helpers.findHostInstancesForRefresh(root, families);
403
+ instancesForRoot.forEach(function (inst) {
404
+ affectedInstances.add(inst);
405
+ });
406
+ });
407
+ return affectedInstances;
408
+ }
409
+ }
410
+ function injectIntoGlobalHook(globalObject) {
411
+ {
412
+ // For React Native, the globalThis hook will be set up by require('react-devtools-core').
413
+ // That code will run before us. So we need to monkeypatch functions on existing hook.
414
+ // For React Web, the globalThis hook will be set up by the extension.
415
+ // This will also run before us.
416
+ var hook = globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__;
417
+
418
+ if (hook === undefined) {
419
+ // However, if there is no DevTools extension, we'll need to set up the globalThis hook ourselves.
420
+ // Note that in this case it's important that renderer code runs *after* this method call.
421
+ // Otherwise, the renderer will think that there is no globalThis hook, and won't do the injection.
422
+ var nextID = 0;
423
+ globalObject.__REACT_DEVTOOLS_GLOBAL_HOOK__ = hook = {
424
+ renderers: new Map(),
425
+ supportsFiber: true,
426
+ inject: function (injected) {
427
+ return nextID++;
428
+ },
429
+ onScheduleFiberRoot: function (id, root, children) {},
430
+ onCommitFiberRoot: function (id, root, maybePriorityLevel, didError) {},
431
+ onCommitFiberUnmount: function () {}
432
+ };
433
+ }
434
+
435
+ if (hook.isDisabled) {
436
+ // This isn't a real property on the hook, but it can be set to opt out
437
+ // of DevTools integration and associated warnings and logs.
438
+ // Using console['warn'] to evade Babel and ESLint
439
+ console['warn']('Something has shimmed the React DevTools globalThis hook (__REACT_DEVTOOLS_GLOBAL_HOOK__). ' + 'Fast Refresh is not compatible with this shim and will be disabled.');
440
+ return;
441
+ } // Here, we just want to get a reference to scheduleRefresh.
442
+
443
+
444
+ var oldInject = hook.inject;
445
+
446
+ hook.inject = function (injected) {
447
+ var id = oldInject.apply(this, arguments);
448
+
449
+ if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {
450
+ // This version supports React Refresh.
451
+ helpersByRendererID.set(id, injected);
452
+ }
453
+
454
+ return id;
455
+ }; // Do the same for any already injected roots.
456
+ // This is useful if ReactDOM has already been initialized.
457
+ // https://github.com/facebook/react/issues/17626
458
+
459
+
460
+ hook.renderers.forEach(function (injected, id) {
461
+ if (typeof injected.scheduleRefresh === 'function' && typeof injected.setRefreshHandler === 'function') {
462
+ // This version supports React Refresh.
463
+ helpersByRendererID.set(id, injected);
464
+ }
465
+ }); // We also want to track currently mounted roots.
466
+
467
+ var oldOnCommitFiberRoot = hook.onCommitFiberRoot;
468
+
469
+ var oldOnScheduleFiberRoot = hook.onScheduleFiberRoot || function () {};
470
+
471
+ hook.onScheduleFiberRoot = function (id, root, children) {
472
+ if (!isPerformingRefresh) {
473
+ // If it was intentionally scheduled, don't attempt to restore.
474
+ // This includes intentionally scheduled unmounts.
475
+ failedRoots.delete(root);
476
+
477
+ if (rootElements !== null) {
478
+ rootElements.set(root, children);
479
+ }
480
+ }
481
+
482
+ return oldOnScheduleFiberRoot.apply(this, arguments);
483
+ };
484
+
485
+ hook.onCommitFiberRoot = function (id, root, maybePriorityLevel, didError) {
486
+ var helpers = helpersByRendererID.get(id);
487
+
488
+ if (helpers !== undefined) {
489
+ helpersByRoot.set(root, helpers);
490
+ var current = root.current;
491
+ var alternate = current.alternate; // We need to determine whether this root has just (un)mounted.
492
+ // This logic is copy-pasted from similar logic in the DevTools backend.
493
+ // If this breaks with some refactoring, you'll want to update DevTools too.
494
+
495
+ if (alternate !== null) {
496
+ var wasMounted = alternate.memoizedState != null && alternate.memoizedState.element != null && mountedRoots.has(root);
497
+ var isMounted = current.memoizedState != null && current.memoizedState.element != null;
498
+
499
+ if (!wasMounted && isMounted) {
500
+ // Mount a new root.
501
+ mountedRoots.add(root);
502
+ failedRoots.delete(root);
503
+ } else if (wasMounted && isMounted) ; else if (wasMounted && !isMounted) {
504
+ // Unmount an existing root.
505
+ mountedRoots.delete(root);
506
+
507
+ if (didError) {
508
+ // We'll remount it on future edits.
509
+ failedRoots.add(root);
510
+ } else {
511
+ helpersByRoot.delete(root);
512
+ }
513
+ } else if (!wasMounted && !isMounted) {
514
+ if (didError) {
515
+ // We'll remount it on future edits.
516
+ failedRoots.add(root);
517
+ }
518
+ }
519
+ } else {
520
+ // Mount a new root.
521
+ mountedRoots.add(root);
522
+ }
523
+ } // Always call the decorated DevTools hook.
524
+
525
+
526
+ return oldOnCommitFiberRoot.apply(this, arguments);
527
+ };
528
+ }
529
+ }
530
+ function hasUnrecoverableErrors() {
531
+ // TODO: delete this after removing dependency in RN.
532
+ return false;
533
+ } // Exposed for testing.
534
+
535
+ function _getMountedRootCount() {
536
+ {
537
+ return mountedRoots.size;
538
+ }
539
+ } // This is a wrapper over more primitive functions for setting signature.
540
+ // Signatures let us decide whether the Hook order has changed on refresh.
541
+ //
542
+ // This function is intended to be used as a transform target, e.g.:
543
+ // var _s = createSignatureFunctionForTransform()
544
+ //
545
+ // function Hello() {
546
+ // const [foo, setFoo] = useState(0);
547
+ // const value = useCustomHook();
548
+ // _s(); /* Call without arguments triggers collecting the custom Hook list.
549
+ // * This doesn't happen during the module evaluation because we
550
+ // * don't want to change the module order with inline requires.
551
+ // * Next calls are noops. */
552
+ // return <h1>Hi</h1>;
553
+ // }
554
+ //
555
+ // /* Call with arguments attaches the signature to the type: */
556
+ // _s(
557
+ // Hello,
558
+ // 'useState{[foo, setFoo]}(0)',
559
+ // () => [useCustomHook], /* Lazy to avoid triggering inline requires */
560
+ // );
561
+
562
+ function createSignatureFunctionForTransform() {
563
+ {
564
+ var savedType;
565
+ var hasCustomHooks;
566
+ var didCollectHooks = false;
567
+ return function (type, key, forceReset, getCustomHooks) {
568
+ if (typeof key === 'string') {
569
+ // We're in the initial phase that associates signatures
570
+ // with the functions. Note this may be called multiple times
571
+ // in HOC chains like _s(hoc1(_s(hoc2(_s(actualFunction))))).
572
+ if (!savedType) {
573
+ // We're in the innermost call, so this is the actual type.
574
+ savedType = type;
575
+ hasCustomHooks = typeof getCustomHooks === 'function';
576
+ } // Set the signature for all types (even wrappers!) in case
577
+ // they have no signatures of their own. This is to prevent
578
+ // problems like https://github.com/facebook/react/issues/20417.
579
+
580
+
581
+ if (type != null && (typeof type === 'function' || typeof type === 'object')) {
582
+ setSignature(type, key, forceReset, getCustomHooks);
583
+ }
584
+
585
+ return type;
586
+ } else {
587
+ // We're in the _s() call without arguments, which means
588
+ // this is the time to collect custom Hook signatures.
589
+ // Only do this once. This path is hot and runs *inside* every render!
590
+ if (!didCollectHooks && hasCustomHooks) {
591
+ didCollectHooks = true;
592
+ collectCustomHooksForSignature(savedType);
593
+ }
594
+ }
595
+ };
596
+ }
597
+ }
598
+ function isLikelyComponentType(type) {
599
+ {
600
+ switch (typeof type) {
601
+ case 'function':
602
+ {
603
+ // First, deal with classes.
604
+ if (type.prototype != null) {
605
+ if (type.prototype.isReactComponent) {
606
+ // React class.
607
+ return true;
608
+ }
609
+
610
+ var ownNames = Object.getOwnPropertyNames(type.prototype);
611
+
612
+ if (ownNames.length > 1 || ownNames[0] !== 'constructor') {
613
+ // This looks like a class.
614
+ return false;
615
+ } // eslint-disable-next-line no-proto
616
+
617
+
618
+ if (type.prototype.__proto__ !== Object.prototype) {
619
+ // It has a superclass.
620
+ return false;
621
+ } // Pass through.
622
+ // This looks like a regular function with empty prototype.
623
+
624
+ } // For plain functions and arrows, use name as a heuristic.
625
+
626
+
627
+ var name = type.name || type.displayName;
628
+ return typeof name === 'string' && /^[A-Z]/.test(name);
629
+ }
630
+
631
+ case 'object':
632
+ {
633
+ if (type != null) {
634
+ switch (getProperty(type, '$$typeof')) {
635
+ case REACT_FORWARD_REF_TYPE:
636
+ case REACT_MEMO_TYPE:
637
+ // Definitely React components.
638
+ return true;
639
+
640
+ default:
641
+ return false;
642
+ }
643
+ }
644
+
645
+ return false;
646
+ }
647
+
648
+ default:
649
+ {
650
+ return false;
651
+ }
652
+ }
653
+ }
654
+ }
655
+
656
+ reactRefreshRuntime_development._getMountedRootCount = _getMountedRootCount;
657
+ reactRefreshRuntime_development.collectCustomHooksForSignature = collectCustomHooksForSignature;
658
+ reactRefreshRuntime_development.createSignatureFunctionForTransform = createSignatureFunctionForTransform;
659
+ reactRefreshRuntime_development.findAffectedHostInstances = findAffectedHostInstances;
660
+ reactRefreshRuntime_development.getFamilyByID = getFamilyByID;
661
+ reactRefreshRuntime_development.getFamilyByType = getFamilyByType;
662
+ reactRefreshRuntime_development.hasUnrecoverableErrors = hasUnrecoverableErrors;
663
+ reactRefreshRuntime_development.injectIntoGlobalHook = injectIntoGlobalHook;
664
+ reactRefreshRuntime_development.isLikelyComponentType = isLikelyComponentType;
665
+ reactRefreshRuntime_development.performReactRefresh = performReactRefresh;
666
+ reactRefreshRuntime_development.register = register;
667
+ reactRefreshRuntime_development.setSignature = setSignature;
668
+ })();
669
+ }
670
+ return reactRefreshRuntime_development;
671
+ }
672
+
673
+ (function (module) {
674
+
675
+ {
676
+ module.exports = requireReactRefreshRuntime_development();
677
+ }
678
+ } (runtime));
679
+
680
+ var __jsenv_default_import__ = /*@__PURE__*/getDefaultExportFromCjs(runtime.exports);
681
+
682
+ var _getMountedRootCount = runtime.exports._getMountedRootCount;
683
+ var collectCustomHooksForSignature = runtime.exports.collectCustomHooksForSignature;
684
+ var createSignatureFunctionForTransform = runtime.exports.createSignatureFunctionForTransform;
685
+ var findAffectedHostInstances = runtime.exports.findAffectedHostInstances;
686
+ var getFamilyByID = runtime.exports.getFamilyByID;
687
+ var getFamilyByType = runtime.exports.getFamilyByType;
688
+ var hasUnrecoverableErrors = runtime.exports.hasUnrecoverableErrors;
689
+ var injectIntoGlobalHook = runtime.exports.injectIntoGlobalHook;
690
+ var isLikelyComponentType = runtime.exports.isLikelyComponentType;
691
+ var performReactRefresh = runtime.exports.performReactRefresh;
692
+ var register = runtime.exports.register;
693
+ var setSignature = runtime.exports.setSignature;
694
+ export { _getMountedRootCount, collectCustomHooksForSignature, createSignatureFunctionForTransform, __jsenv_default_import__ as default, findAffectedHostInstances, getFamilyByID, getFamilyByType, hasUnrecoverableErrors, injectIntoGlobalHook, isLikelyComponentType, performReactRefresh, register, setSignature };
695
+
696
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVudGltZS5qcyIsInNvdXJjZXMiOlsiZmlsZTovLy9Vc2Vycy9kLm1haWxsYXJkL2Rldi9qc2Vudi9qc2Vudi1jb3JlL25vZGVfbW9kdWxlcy9yZWFjdC1yZWZyZXNoL2Nqcy9yZWFjdC1yZWZyZXNoLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanMiLCJmaWxlOi8vL1VzZXJzL2QubWFpbGxhcmQvZGV2L2pzZW52L2pzZW52LWNvcmUvbm9kZV9tb2R1bGVzL3JlYWN0LXJlZnJlc2gvcnVudGltZS5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlIFJlYWN0XG4gKiByZWFjdC1yZWZyZXNoLXJ1bnRpbWUuZGV2ZWxvcG1lbnQuanNcbiAqXG4gKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy5cbiAqXG4gKiBUaGlzIHNvdXJjZSBjb2RlIGlzIGxpY2Vuc2VkIHVuZGVyIHRoZSBNSVQgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqL1xuXG4ndXNlIHN0cmljdCc7XG5cbmlmIChwcm9jZXNzLmVudi5OT0RFX0VOViAhPT0gXCJwcm9kdWN0aW9uXCIpIHtcbiAgKGZ1bmN0aW9uKCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBBVFRFTlRJT05cbnZhciBSRUFDVF9GT1JXQVJEX1JFRl9UWVBFID0gIFN5bWJvbC5mb3IoJ3JlYWN0LmZvcndhcmRfcmVmJyk7XG52YXIgUkVBQ1RfTUVNT19UWVBFID0gIFN5bWJvbC5mb3IoJ3JlYWN0Lm1lbW8nKTtcblxudmFyIFBvc3NpYmx5V2Vha01hcCA9IHR5cGVvZiBXZWFrTWFwID09PSAnZnVuY3Rpb24nID8gV2Vha01hcCA6IE1hcDsgLy8gV2UgbmV2ZXIgcmVtb3ZlIHRoZXNlIGFzc29jaWF0aW9ucy5cbi8vIEl0J3MgT0sgdG8gcmVmZXJlbmNlIGZhbWlsaWVzLCBidXQgdXNlIFdlYWtNYXAvU2V0IGZvciB0eXBlcy5cblxudmFyIGFsbEZhbWlsaWVzQnlJRCA9IG5ldyBNYXAoKTtcbnZhciBhbGxGYW1pbGllc0J5VHlwZSA9IG5ldyBQb3NzaWJseVdlYWtNYXAoKTtcbnZhciBhbGxTaWduYXR1cmVzQnlUeXBlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpOyAvLyBUaGlzIFdlYWtNYXAgaXMgcmVhZCBieSBSZWFjdCwgc28gd2Ugb25seSBwdXQgZmFtaWxpZXNcbi8vIHRoYXQgaGF2ZSBhY3R1YWxseSBiZWVuIGVkaXRlZCBoZXJlLiBUaGlzIGtlZXBzIGNoZWNrcyBmYXN0LlxuLy8gJEZsb3dJc3N1ZVxuXG52YXIgdXBkYXRlZEZhbWlsaWVzQnlUeXBlID0gbmV3IFBvc3NpYmx5V2Vha01hcCgpOyAvLyBUaGlzIGlzIGNsZWFyZWQgb24gZXZlcnkgcGVyZm9ybVJlYWN0UmVmcmVzaCgpIGNhbGwuXG4vLyBJdCBpcyBhbiBhcnJheSBvZiBbRmFtaWx5LCBOZXh0VHlwZV0gdHVwbGVzLlxuXG52YXIgcGVuZGluZ1VwZGF0ZXMgPSBbXTsgLy8gVGhpcyBpcyBpbmplY3RlZCBieSB0aGUgcmVuZGVyZXIgdmlhIERldlRvb2xzIGdsb2JhbCBob29rLlxuXG52YXIgaGVscGVyc0J5UmVuZGVyZXJJRCA9IG5ldyBNYXAoKTtcbnZhciBoZWxwZXJzQnlSb290ID0gbmV3IE1hcCgpOyAvLyBXZSBrZWVwIHRyYWNrIG9mIG1vdW50ZWQgcm9vdHMgc28gd2UgY2FuIHNjaGVkdWxlIHVwZGF0ZXMuXG5cbnZhciBtb3VudGVkUm9vdHMgPSBuZXcgU2V0KCk7IC8vIElmIGEgcm9vdCBjYXB0dXJlcyBhbiBlcnJvciwgd2UgcmVtZW1iZXIgaXQgc28gd2UgY2FuIHJldHJ5IG9uIGVkaXQuXG5cbnZhciBmYWlsZWRSb290cyA9IG5ldyBTZXQoKTsgLy8gSW4gZW52aXJvbm1lbnRzIHRoYXQgc3VwcG9ydCBXZWFrTWFwLCB3ZSBhbHNvIHJlbWVtYmVyIHRoZSBsYXN0IGVsZW1lbnQgZm9yIGV2ZXJ5IHJvb3QuXG4vLyBJdCBuZWVkcyB0byBiZSB3ZWFrIGJlY2F1c2Ugd2UgZG8gdGhpcyBldmVuIGZvciByb290cyB0aGF0IGZhaWxlZCB0byBtb3VudC5cbi8vIElmIHRoZXJlIGlzIG5vIFdlYWtNYXAsIHdlIHdvbid0IGF0dGVtcHQgdG8gZG8gcmV0cnlpbmcuXG4vLyAkRmxvd0lzc3VlXG5cbnZhciByb290RWxlbWVudHMgPSAvLyAkRmxvd0lzc3VlXG50eXBlb2YgV2Vha01hcCA9PT0gJ2Z1bmN0aW9uJyA/IG5ldyBXZWFrTWFwKCkgOiBudWxsO1xudmFyIGlzUGVyZm9ybWluZ1JlZnJlc2ggPSBmYWxzZTtcblxuZnVuY3Rpb24gY29tcHV0ZUZ1bGxLZXkoc2lnbmF0dXJlKSB7XG4gIGlmIChzaWduYXR1cmUuZnVsbEtleSAhPT0gbnVsbCkge1xuICAgIHJldHVybiBzaWduYXR1cmUuZnVsbEtleTtcbiAgfVxuXG4gIHZhciBmdWxsS2V5ID0gc2lnbmF0dXJlLm93bktleTtcbiAgdmFyIGhvb2tzO1xuXG4gIHRyeSB7XG4gICAgaG9va3MgPSBzaWduYXR1cmUuZ2V0Q3VzdG9tSG9va3MoKTtcbiAgfSBjYXRjaCAoZXJyKSB7XG4gICAgLy8gVGhpcyBjYW4gaGFwcGVuIGluIGFuIGVkZ2UgY2FzZSwgZS5nLiBpZiBleHByZXNzaW9uIGxpa2UgRm9vLnVzZVNvbWV0aGluZ1xuICAgIC8vIGRlcGVuZHMgb24gRm9vIHdoaWNoIGlzIGxhemlseSBpbml0aWFsaXplZCBkdXJpbmcgcmVuZGVyaW5nLlxuICAgIC8vIEluIHRoYXQgY2FzZSBqdXN0IGFzc3VtZSB3ZSdsbCBoYXZlIHRvIHJlbW91bnQuXG4gICAgc2lnbmF0dXJlLmZvcmNlUmVzZXQgPSB0cnVlO1xuICAgIHNpZ25hdHVyZS5mdWxsS2V5ID0gZnVsbEtleTtcbiAgICByZXR1cm4gZnVsbEtleTtcbiAgfVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgaG9va3MubGVuZ3RoOyBpKyspIHtcbiAgICB2YXIgaG9vayA9IGhvb2tzW2ldO1xuXG4gICAgaWYgKHR5cGVvZiBob29rICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAvLyBTb21ldGhpbmcncyB3cm9uZy4gQXNzdW1lIHdlIG5lZWQgdG8gcmVtb3VudC5cbiAgICAgIHNpZ25hdHVyZS5mb3JjZVJlc2V0ID0gdHJ1ZTtcbiAgICAgIHNpZ25hdHVyZS5mdWxsS2V5ID0gZnVsbEtleTtcbiAgICAgIHJldHVybiBmdWxsS2V5O1xuICAgIH1cblxuICAgIHZhciBuZXN0ZWRIb29rU2lnbmF0dXJlID0gYWxsU2lnbmF0dXJlc0J5VHlwZS5nZXQoaG9vayk7XG5cbiAgICBpZiAobmVzdGVkSG9va1NpZ25hdHVyZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAvLyBObyBzaWduYXR1cmUgbWVhbnMgSG9vayB3YXNuJ3QgaW4gdGhlIHNvdXJjZSBjb2RlLCBlLmcuIGluIGEgbGlicmFyeS5cbiAgICAgIC8vIFdlJ2xsIHNraXAgaXQgYmVjYXVzZSB3ZSBjYW4gYXNzdW1lIGl0IHdvbid0IGNoYW5nZSBkdXJpbmcgdGhpcyBzZXNzaW9uLlxuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgdmFyIG5lc3RlZEhvb2tLZXkgPSBjb21wdXRlRnVsbEtleShuZXN0ZWRIb29rU2lnbmF0dXJlKTtcblxuICAgIGlmIChuZXN0ZWRIb29rU2lnbmF0dXJlLmZvcmNlUmVzZXQpIHtcbiAgICAgIHNpZ25hdHVyZS5mb3JjZVJlc2V0ID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBmdWxsS2V5ICs9ICdcXG4tLS1cXG4nICsgbmVzdGVkSG9va0tleTtcbiAgfVxuXG4gIHNpZ25hdHVyZS5mdWxsS2V5ID0gZnVsbEtleTtcbiAgcmV0dXJuIGZ1bGxLZXk7XG59XG5cbmZ1bmN0aW9uIGhhdmVFcXVhbFNpZ25hdHVyZXMocHJldlR5cGUsIG5leHRUeXBlKSB7XG4gIHZhciBwcmV2U2lnbmF0dXJlID0gYWxsU2lnbmF0dXJlc0J5VHlwZS5nZXQocHJldlR5cGUpO1xuICB2YXIgbmV4dFNpZ25hdHVyZSA9IGFsbFNpZ25hdHVyZXNCeVR5cGUuZ2V0KG5leHRUeXBlKTtcblxuICBpZiAocHJldlNpZ25hdHVyZSA9PT0gdW5kZWZpbmVkICYmIG5leHRTaWduYXR1cmUgPT09IHVuZGVmaW5lZCkge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgaWYgKHByZXZTaWduYXR1cmUgPT09IHVuZGVmaW5lZCB8fCBuZXh0U2lnbmF0dXJlID09PSB1bmRlZmluZWQpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoY29tcHV0ZUZ1bGxLZXkocHJldlNpZ25hdHVyZSkgIT09IGNvbXB1dGVGdWxsS2V5KG5leHRTaWduYXR1cmUpKSB7XG4gICAgcmV0dXJuIGZhbHNlO1xuICB9XG5cbiAgaWYgKG5leHRTaWduYXR1cmUuZm9yY2VSZXNldCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5mdW5jdGlvbiBpc1JlYWN0Q2xhc3ModHlwZSkge1xuICByZXR1cm4gdHlwZS5wcm90b3R5cGUgJiYgdHlwZS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudDtcbn1cblxuZnVuY3Rpb24gY2FuUHJlc2VydmVTdGF0ZUJldHdlZW4ocHJldlR5cGUsIG5leHRUeXBlKSB7XG4gIGlmIChpc1JlYWN0Q2xhc3MocHJldlR5cGUpIHx8IGlzUmVhY3RDbGFzcyhuZXh0VHlwZSkpIHtcbiAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICBpZiAoaGF2ZUVxdWFsU2lnbmF0dXJlcyhwcmV2VHlwZSwgbmV4dFR5cGUpKSB7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmZ1bmN0aW9uIHJlc29sdmVGYW1pbHkodHlwZSkge1xuICAvLyBPbmx5IGNoZWNrIHVwZGF0ZWQgdHlwZXMgdG8ga2VlcCBsb29rdXBzIGZhc3QuXG4gIHJldHVybiB1cGRhdGVkRmFtaWxpZXNCeVR5cGUuZ2V0KHR5cGUpO1xufSAvLyBJZiB3ZSBkaWRuJ3QgY2FyZSBhYm91dCBJRTExLCB3ZSBjb3VsZCB1c2UgbmV3IE1hcC9TZXQoaXRlcmFibGUpLlxuXG5cbmZ1bmN0aW9uIGNsb25lTWFwKG1hcCkge1xuICB2YXIgY2xvbmUgPSBuZXcgTWFwKCk7XG4gIG1hcC5mb3JFYWNoKGZ1bmN0aW9uICh2YWx1ZSwga2V5KSB7XG4gICAgY2xvbmUuc2V0KGtleSwgdmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIGNsb25lO1xufVxuXG5mdW5jdGlvbiBjbG9uZVNldChzZXQpIHtcbiAgdmFyIGNsb25lID0gbmV3IFNldCgpO1xuICBzZXQuZm9yRWFjaChmdW5jdGlvbiAodmFsdWUpIHtcbiAgICBjbG9uZS5hZGQodmFsdWUpO1xuICB9KTtcbiAgcmV0dXJuIGNsb25lO1xufSAvLyBUaGlzIGlzIGEgc2FmZXR5IG1lY2hhbmlzbSB0byBwcm90ZWN0IGFnYWluc3Qgcm9ndWUgZ2V0dGVycyBhbmQgUHJveGllcy5cblxuXG5mdW5jdGlvbiBnZXRQcm9wZXJ0eShvYmplY3QsIHByb3BlcnR5KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIG9iamVjdFtwcm9wZXJ0eV07XG4gIH0gY2F0Y2ggKGVycikge1xuICAgIC8vIEludGVudGlvbmFsbHkgaWdub3JlLlxuICAgIHJldHVybiB1bmRlZmluZWQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGVyZm9ybVJlYWN0UmVmcmVzaCgpIHtcblxuICBpZiAocGVuZGluZ1VwZGF0ZXMubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIG51bGw7XG4gIH1cblxuICBpZiAoaXNQZXJmb3JtaW5nUmVmcmVzaCkge1xuICAgIHJldHVybiBudWxsO1xuICB9XG5cbiAgaXNQZXJmb3JtaW5nUmVmcmVzaCA9IHRydWU7XG5cbiAgdHJ5IHtcbiAgICB2YXIgc3RhbGVGYW1pbGllcyA9IG5ldyBTZXQoKTtcbiAgICB2YXIgdXBkYXRlZEZhbWlsaWVzID0gbmV3IFNldCgpO1xuICAgIHZhciB1cGRhdGVzID0gcGVuZGluZ1VwZGF0ZXM7XG4gICAgcGVuZGluZ1VwZGF0ZXMgPSBbXTtcbiAgICB1cGRhdGVzLmZvckVhY2goZnVuY3Rpb24gKF9yZWYpIHtcbiAgICAgIHZhciBmYW1pbHkgPSBfcmVmWzBdLFxuICAgICAgICAgIG5leHRUeXBlID0gX3JlZlsxXTtcbiAgICAgIC8vIE5vdyB0aGF0IHdlIGdvdCBhIHJlYWwgZWRpdCwgd2UgY2FuIGNyZWF0ZSBhc3NvY2lhdGlvbnNcbiAgICAgIC8vIHRoYXQgd2lsbCBiZSByZWFkIGJ5IHRoZSBSZWFjdCByZWNvbmNpbGVyLlxuICAgICAgdmFyIHByZXZUeXBlID0gZmFtaWx5LmN1cnJlbnQ7XG4gICAgICB1cGRhdGVkRmFtaWxpZXNCeVR5cGUuc2V0KHByZXZUeXBlLCBmYW1pbHkpO1xuICAgICAgdXBkYXRlZEZhbWlsaWVzQnlUeXBlLnNldChuZXh0VHlwZSwgZmFtaWx5KTtcbiAgICAgIGZhbWlseS5jdXJyZW50ID0gbmV4dFR5cGU7IC8vIERldGVybWluZSB3aGV0aGVyIHRoaXMgc2hvdWxkIGJlIGEgcmUtcmVuZGVyIG9yIGEgcmUtbW91bnQuXG5cbiAgICAgIGlmIChjYW5QcmVzZXJ2ZVN0YXRlQmV0d2VlbihwcmV2VHlwZSwgbmV4dFR5cGUpKSB7XG4gICAgICAgIHVwZGF0ZWRGYW1pbGllcy5hZGQoZmFtaWx5KTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHN0YWxlRmFtaWxpZXMuYWRkKGZhbWlseSk7XG4gICAgICB9XG4gICAgfSk7IC8vIFRPRE86IHJlbmFtZSB0aGVzZSBmaWVsZHMgdG8gc29tZXRoaW5nIG1vcmUgbWVhbmluZ2Z1bC5cblxuICAgIHZhciB1cGRhdGUgPSB7XG4gICAgICB1cGRhdGVkRmFtaWxpZXM6IHVwZGF0ZWRGYW1pbGllcyxcbiAgICAgIC8vIEZhbWlsaWVzIHRoYXQgd2lsbCByZS1yZW5kZXIgcHJlc2VydmluZyBzdGF0ZVxuICAgICAgc3RhbGVGYW1pbGllczogc3RhbGVGYW1pbGllcyAvLyBGYW1pbGllcyB0aGF0IHdpbGwgYmUgcmVtb3VudGVkXG5cbiAgICB9O1xuICAgIGhlbHBlcnNCeVJlbmRlcmVySUQuZm9yRWFjaChmdW5jdGlvbiAoaGVscGVycykge1xuICAgICAgLy8gRXZlbiBpZiB0aGVyZSBhcmUgbm8gcm9vdHMsIHNldCB0aGUgaGFuZGxlciBvbiBmaXJzdCB1cGRhdGUuXG4gICAgICAvLyBUaGlzIGVuc3VyZXMgdGhhdCBpZiAqbmV3KiByb290cyBhcmUgbW91bnRlZCwgdGhleSdsbCB1c2UgdGhlIHJlc29sdmUgaGFuZGxlci5cbiAgICAgIGhlbHBlcnMuc2V0UmVmcmVzaEhhbmRsZXIocmVzb2x2ZUZhbWlseSk7XG4gICAgfSk7XG4gICAgdmFyIGRpZEVycm9yID0gZmFsc2U7XG4gICAgdmFyIGZpcnN0RXJyb3IgPSBudWxsOyAvLyBXZSBzbmFwc2hvdCBtYXBzIGFuZCBzZXRzIHRoYXQgYXJlIG11dGF0ZWQgZHVyaW5nIGNvbW1pdHMuXG4gICAgLy8gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhlcmUgaXMgYSByaXNrIHRoZXkgd2lsbCBiZSBtdXRhdGVkIHdoaWxlXG4gICAgLy8gd2UgaXRlcmF0ZSBvdmVyIHRoZW0uIEZvciBleGFtcGxlLCB0cnlpbmcgdG8gcmVjb3ZlciBhIGZhaWxlZCByb290XG4gICAgLy8gbWF5IGNhdXNlIGFub3RoZXIgcm9vdCB0byBiZSBhZGRlZCB0byB0aGUgZmFpbGVkIGxpc3QgLS0gYW4gaW5maW5pdGUgbG9vcC5cblxuICAgIHZhciBmYWlsZWRSb290c1NuYXBzaG90ID0gY2xvbmVTZXQoZmFpbGVkUm9vdHMpO1xuICAgIHZhciBtb3VudGVkUm9vdHNTbmFwc2hvdCA9IGNsb25lU2V0KG1vdW50ZWRSb290cyk7XG4gICAgdmFyIGhlbHBlcnNCeVJvb3RTbmFwc2hvdCA9IGNsb25lTWFwKGhlbHBlcnNCeVJvb3QpO1xuICAgIGZhaWxlZFJvb3RzU25hcHNob3QuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgdmFyIGhlbHBlcnMgPSBoZWxwZXJzQnlSb290U25hcHNob3QuZ2V0KHJvb3QpO1xuXG4gICAgICBpZiAoaGVscGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgaGVscGVycyBmb3IgYSByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0IFJlZnJlc2guJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghZmFpbGVkUm9vdHMuaGFzKHJvb3QpKSB7Ly8gTm8gbG9uZ2VyIGZhaWxlZC5cbiAgICAgIH1cblxuICAgICAgaWYgKHJvb3RFbGVtZW50cyA9PT0gbnVsbCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIGlmICghcm9vdEVsZW1lbnRzLmhhcyhyb290KSkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG5cbiAgICAgIHZhciBlbGVtZW50ID0gcm9vdEVsZW1lbnRzLmdldChyb290KTtcblxuICAgICAgdHJ5IHtcbiAgICAgICAgaGVscGVycy5zY2hlZHVsZVJvb3Qocm9vdCwgZWxlbWVudCk7XG4gICAgICB9IGNhdGNoIChlcnIpIHtcbiAgICAgICAgaWYgKCFkaWRFcnJvcikge1xuICAgICAgICAgIGRpZEVycm9yID0gdHJ1ZTtcbiAgICAgICAgICBmaXJzdEVycm9yID0gZXJyO1xuICAgICAgICB9IC8vIEtlZXAgdHJ5aW5nIG90aGVyIHJvb3RzLlxuXG4gICAgICB9XG4gICAgfSk7XG4gICAgbW91bnRlZFJvb3RzU25hcHNob3QuZm9yRWFjaChmdW5jdGlvbiAocm9vdCkge1xuICAgICAgdmFyIGhlbHBlcnMgPSBoZWxwZXJzQnlSb290U25hcHNob3QuZ2V0KHJvb3QpO1xuXG4gICAgICBpZiAoaGVscGVycyA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQ291bGQgbm90IGZpbmQgaGVscGVycyBmb3IgYSByb290LiBUaGlzIGlzIGEgYnVnIGluIFJlYWN0IFJlZnJlc2guJyk7XG4gICAgICB9XG5cbiAgICAgIGlmICghbW91bnRlZFJvb3RzLmhhcyhyb290KSkgey8vIE5vIGxvbmdlciBtb3VudGVkLlxuICAgICAgfVxuXG4gICAgICB0cnkge1xuICAgICAgICBoZWxwZXJzLnNjaGVkdWxlUmVmcmVzaChyb290LCB1cGRhdGUpO1xuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGlmICghZGlkRXJyb3IpIHtcbiAgICAgICAgICBkaWRFcnJvciA9IHRydWU7XG4gICAgICAgICAgZmlyc3RFcnJvciA9IGVycjtcbiAgICAgICAgfSAvLyBLZWVwIHRyeWluZyBvdGhlciByb290cy5cblxuICAgICAgfVxuICAgIH0pO1xuXG4gICAgaWYgKGRpZEVycm9yKSB7XG4gICAgICB0aHJvdyBmaXJzdEVycm9yO1xuICAgIH1cblxuICAgIHJldHVybiB1cGRhdGU7XG4gIH0gZmluYWxseSB7XG4gICAgaXNQZXJmb3JtaW5nUmVmcmVzaCA9IGZhbHNlO1xuICB9XG59XG5mdW5jdGlvbiByZWdpc3Rlcih0eXBlLCBpZCkge1xuICB7XG4gICAgaWYgKHR5cGUgPT09IG51bGwpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodHlwZW9mIHR5cGUgIT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIHR5cGUgIT09ICdvYmplY3QnKSB7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBUaGlzIGNhbiBoYXBwZW4gaW4gYW4gZWRnZSBjYXNlLCBlLmcuIGlmIHdlIHJlZ2lzdGVyXG4gICAgLy8gcmV0dXJuIHZhbHVlIG9mIGEgSE9DIGJ1dCBpdCByZXR1cm5zIGEgY2FjaGVkIGNvbXBvbmVudC5cbiAgICAvLyBJZ25vcmUgYW55dGhpbmcgYnV0IHRoZSBmaXJzdCByZWdpc3RyYXRpb24gZm9yIGVhY2ggdHlwZS5cblxuXG4gICAgaWYgKGFsbEZhbWlsaWVzQnlUeXBlLmhhcyh0eXBlKSkge1xuICAgICAgcmV0dXJuO1xuICAgIH0gLy8gQ3JlYXRlIGZhbWlseSBvciByZW1lbWJlciB0byB1cGRhdGUgaXQuXG4gICAgLy8gTm9uZSBvZiB0aGlzIGJvb2trZWVwaW5nIGFmZmVjdHMgcmVjb25jaWxpYXRpb25cbiAgICAvLyB1bnRpbCB0aGUgZmlyc3QgcGVyZm9ybVJlYWN0UmVmcmVzaCgpIGNhbGwgYWJvdmUuXG5cblxuICAgIHZhciBmYW1pbHkgPSBhbGxGYW1pbGllc0J5SUQuZ2V0KGlkKTtcblxuICAgIGlmIChmYW1pbHkgPT09IHVuZGVmaW5lZCkge1xuICAgICAgZmFtaWx5ID0ge1xuICAgICAgICBjdXJyZW50OiB0eXBlXG4gICAgICB9O1xuICAgICAgYWxsRmFtaWxpZXNCeUlELnNldChpZCwgZmFtaWx5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcGVuZGluZ1VwZGF0ZXMucHVzaChbZmFtaWx5LCB0eXBlXSk7XG4gICAgfVxuXG4gICAgYWxsRmFtaWxpZXNCeVR5cGUuc2V0KHR5cGUsIGZhbWlseSk7IC8vIFZpc2l0IGlubmVyIHR5cGVzIGJlY2F1c2Ugd2UgbWlnaHQgbm90IGhhdmUgcmVnaXN0ZXJlZCB0aGVtLlxuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKGdldFByb3BlcnR5KHR5cGUsICckJHR5cGVvZicpKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICByZWdpc3Rlcih0eXBlLnJlbmRlciwgaWQgKyAnJHJlbmRlcicpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgIHJlZ2lzdGVyKHR5cGUudHlwZSwgaWQgKyAnJHR5cGUnKTtcbiAgICAgICAgICBicmVhaztcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbmZ1bmN0aW9uIHNldFNpZ25hdHVyZSh0eXBlLCBrZXkpIHtcbiAgdmFyIGZvcmNlUmVzZXQgPSBhcmd1bWVudHMubGVuZ3RoID4gMiAmJiBhcmd1bWVudHNbMl0gIT09IHVuZGVmaW5lZCA/IGFyZ3VtZW50c1syXSA6IGZhbHNlO1xuICB2YXIgZ2V0Q3VzdG9tSG9va3MgPSBhcmd1bWVudHMubGVuZ3RoID4gMyA/IGFyZ3VtZW50c1szXSA6IHVuZGVmaW5lZDtcblxuICB7XG4gICAgaWYgKCFhbGxTaWduYXR1cmVzQnlUeXBlLmhhcyh0eXBlKSkge1xuICAgICAgYWxsU2lnbmF0dXJlc0J5VHlwZS5zZXQodHlwZSwge1xuICAgICAgICBmb3JjZVJlc2V0OiBmb3JjZVJlc2V0LFxuICAgICAgICBvd25LZXk6IGtleSxcbiAgICAgICAgZnVsbEtleTogbnVsbCxcbiAgICAgICAgZ2V0Q3VzdG9tSG9va3M6IGdldEN1c3RvbUhvb2tzIHx8IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgICByZXR1cm4gW107XG4gICAgICAgIH1cbiAgICAgIH0pO1xuICAgIH0gLy8gVmlzaXQgaW5uZXIgdHlwZXMgYmVjYXVzZSB3ZSBtaWdodCBub3QgaGF2ZSBzaWduZWQgdGhlbS5cblxuXG4gICAgaWYgKHR5cGVvZiB0eXBlID09PSAnb2JqZWN0JyAmJiB0eXBlICE9PSBudWxsKSB7XG4gICAgICBzd2l0Y2ggKGdldFByb3BlcnR5KHR5cGUsICckJHR5cGVvZicpKSB7XG4gICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICBzZXRTaWduYXR1cmUodHlwZS5yZW5kZXIsIGtleSwgZm9yY2VSZXNldCwgZ2V0Q3VzdG9tSG9va3MpO1xuICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgUkVBQ1RfTUVNT19UWVBFOlxuICAgICAgICAgIHNldFNpZ25hdHVyZSh0eXBlLnR5cGUsIGtleSwgZm9yY2VSZXNldCwgZ2V0Q3VzdG9tSG9va3MpO1xuICAgICAgICAgIGJyZWFrO1xuICAgICAgfVxuICAgIH1cbiAgfVxufSAvLyBUaGlzIGlzIGxhemlseSBjYWxsZWQgZHVyaW5nIGZpcnN0IHJlbmRlciBmb3IgYSB0eXBlLlxuLy8gSXQgY2FwdHVyZXMgSG9vayBsaXN0IGF0IHRoYXQgdGltZSBzbyBpbmxpbmUgcmVxdWlyZXMgZG9uJ3QgYnJlYWsgY29tcGFyaXNvbnMuXG5cbmZ1bmN0aW9uIGNvbGxlY3RDdXN0b21Ib29rc0ZvclNpZ25hdHVyZSh0eXBlKSB7XG4gIHtcbiAgICB2YXIgc2lnbmF0dXJlID0gYWxsU2lnbmF0dXJlc0J5VHlwZS5nZXQodHlwZSk7XG5cbiAgICBpZiAoc2lnbmF0dXJlICE9PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbXB1dGVGdWxsS2V5KHNpZ25hdHVyZSk7XG4gICAgfVxuICB9XG59XG5mdW5jdGlvbiBnZXRGYW1pbHlCeUlEKGlkKSB7XG4gIHtcbiAgICByZXR1cm4gYWxsRmFtaWxpZXNCeUlELmdldChpZCk7XG4gIH1cbn1cbmZ1bmN0aW9uIGdldEZhbWlseUJ5VHlwZSh0eXBlKSB7XG4gIHtcbiAgICByZXR1cm4gYWxsRmFtaWxpZXNCeVR5cGUuZ2V0KHR5cGUpO1xuICB9XG59XG5mdW5jdGlvbiBmaW5kQWZmZWN0ZWRIb3N0SW5zdGFuY2VzKGZhbWlsaWVzKSB7XG4gIHtcbiAgICB2YXIgYWZmZWN0ZWRJbnN0YW5jZXMgPSBuZXcgU2V0KCk7XG4gICAgbW91bnRlZFJvb3RzLmZvckVhY2goZnVuY3Rpb24gKHJvb3QpIHtcbiAgICAgIHZhciBoZWxwZXJzID0gaGVscGVyc0J5Um9vdC5nZXQocm9vdCk7XG5cbiAgICAgIGlmIChoZWxwZXJzID09PSB1bmRlZmluZWQpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBoZWxwZXJzIGZvciBhIHJvb3QuIFRoaXMgaXMgYSBidWcgaW4gUmVhY3QgUmVmcmVzaC4nKTtcbiAgICAgIH1cblxuICAgICAgdmFyIGluc3RhbmNlc0ZvclJvb3QgPSBoZWxwZXJzLmZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaChyb290LCBmYW1pbGllcyk7XG4gICAgICBpbnN0YW5jZXNGb3JSb290LmZvckVhY2goZnVuY3Rpb24gKGluc3QpIHtcbiAgICAgICAgYWZmZWN0ZWRJbnN0YW5jZXMuYWRkKGluc3QpO1xuICAgICAgfSk7XG4gICAgfSk7XG4gICAgcmV0dXJuIGFmZmVjdGVkSW5zdGFuY2VzO1xuICB9XG59XG5mdW5jdGlvbiBpbmplY3RJbnRvR2xvYmFsSG9vayhnbG9iYWxPYmplY3QpIHtcbiAge1xuICAgIC8vIEZvciBSZWFjdCBOYXRpdmUsIHRoZSBnbG9iYWwgaG9vayB3aWxsIGJlIHNldCB1cCBieSByZXF1aXJlKCdyZWFjdC1kZXZ0b29scy1jb3JlJykuXG4gICAgLy8gVGhhdCBjb2RlIHdpbGwgcnVuIGJlZm9yZSB1cy4gU28gd2UgbmVlZCB0byBtb25rZXlwYXRjaCBmdW5jdGlvbnMgb24gZXhpc3RpbmcgaG9vay5cbiAgICAvLyBGb3IgUmVhY3QgV2ViLCB0aGUgZ2xvYmFsIGhvb2sgd2lsbCBiZSBzZXQgdXAgYnkgdGhlIGV4dGVuc2lvbi5cbiAgICAvLyBUaGlzIHdpbGwgYWxzbyBydW4gYmVmb3JlIHVzLlxuICAgIHZhciBob29rID0gZ2xvYmFsT2JqZWN0Ll9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXztcblxuICAgIGlmIChob29rID09PSB1bmRlZmluZWQpIHtcbiAgICAgIC8vIEhvd2V2ZXIsIGlmIHRoZXJlIGlzIG5vIERldlRvb2xzIGV4dGVuc2lvbiwgd2UnbGwgbmVlZCB0byBzZXQgdXAgdGhlIGdsb2JhbCBob29rIG91cnNlbHZlcy5cbiAgICAgIC8vIE5vdGUgdGhhdCBpbiB0aGlzIGNhc2UgaXQncyBpbXBvcnRhbnQgdGhhdCByZW5kZXJlciBjb2RlIHJ1bnMgKmFmdGVyKiB0aGlzIG1ldGhvZCBjYWxsLlxuICAgICAgLy8gT3RoZXJ3aXNlLCB0aGUgcmVuZGVyZXIgd2lsbCB0aGluayB0aGF0IHRoZXJlIGlzIG5vIGdsb2JhbCBob29rLCBhbmQgd29uJ3QgZG8gdGhlIGluamVjdGlvbi5cbiAgICAgIHZhciBuZXh0SUQgPSAwO1xuICAgICAgZ2xvYmFsT2JqZWN0Ll9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyA9IGhvb2sgPSB7XG4gICAgICAgIHJlbmRlcmVyczogbmV3IE1hcCgpLFxuICAgICAgICBzdXBwb3J0c0ZpYmVyOiB0cnVlLFxuICAgICAgICBpbmplY3Q6IGZ1bmN0aW9uIChpbmplY3RlZCkge1xuICAgICAgICAgIHJldHVybiBuZXh0SUQrKztcbiAgICAgICAgfSxcbiAgICAgICAgb25TY2hlZHVsZUZpYmVyUm9vdDogZnVuY3Rpb24gKGlkLCByb290LCBjaGlsZHJlbikge30sXG4gICAgICAgIG9uQ29tbWl0RmliZXJSb290OiBmdW5jdGlvbiAoaWQsIHJvb3QsIG1heWJlUHJpb3JpdHlMZXZlbCwgZGlkRXJyb3IpIHt9LFxuICAgICAgICBvbkNvbW1pdEZpYmVyVW5tb3VudDogZnVuY3Rpb24gKCkge31cbiAgICAgIH07XG4gICAgfVxuXG4gICAgaWYgKGhvb2suaXNEaXNhYmxlZCkge1xuICAgICAgLy8gVGhpcyBpc24ndCBhIHJlYWwgcHJvcGVydHkgb24gdGhlIGhvb2ssIGJ1dCBpdCBjYW4gYmUgc2V0IHRvIG9wdCBvdXRcbiAgICAgIC8vIG9mIERldlRvb2xzIGludGVncmF0aW9uIGFuZCBhc3NvY2lhdGVkIHdhcm5pbmdzIGFuZCBsb2dzLlxuICAgICAgLy8gVXNpbmcgY29uc29sZVsnd2FybiddIHRvIGV2YWRlIEJhYmVsIGFuZCBFU0xpbnRcbiAgICAgIGNvbnNvbGVbJ3dhcm4nXSgnU29tZXRoaW5nIGhhcyBzaGltbWVkIHRoZSBSZWFjdCBEZXZUb29scyBnbG9iYWwgaG9vayAoX19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fKS4gJyArICdGYXN0IFJlZnJlc2ggaXMgbm90IGNvbXBhdGlibGUgd2l0aCB0aGlzIHNoaW0gYW5kIHdpbGwgYmUgZGlzYWJsZWQuJyk7XG4gICAgICByZXR1cm47XG4gICAgfSAvLyBIZXJlLCB3ZSBqdXN0IHdhbnQgdG8gZ2V0IGEgcmVmZXJlbmNlIHRvIHNjaGVkdWxlUmVmcmVzaC5cblxuXG4gICAgdmFyIG9sZEluamVjdCA9IGhvb2suaW5qZWN0O1xuXG4gICAgaG9vay5pbmplY3QgPSBmdW5jdGlvbiAoaW5qZWN0ZWQpIHtcbiAgICAgIHZhciBpZCA9IG9sZEluamVjdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuXG4gICAgICBpZiAodHlwZW9mIGluamVjdGVkLnNjaGVkdWxlUmVmcmVzaCA9PT0gJ2Z1bmN0aW9uJyAmJiB0eXBlb2YgaW5qZWN0ZWQuc2V0UmVmcmVzaEhhbmRsZXIgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgLy8gVGhpcyB2ZXJzaW9uIHN1cHBvcnRzIFJlYWN0IFJlZnJlc2guXG4gICAgICAgIGhlbHBlcnNCeVJlbmRlcmVySUQuc2V0KGlkLCBpbmplY3RlZCk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpZDtcbiAgICB9OyAvLyBEbyB0aGUgc2FtZSBmb3IgYW55IGFscmVhZHkgaW5qZWN0ZWQgcm9vdHMuXG4gICAgLy8gVGhpcyBpcyB1c2VmdWwgaWYgUmVhY3RET00gaGFzIGFscmVhZHkgYmVlbiBpbml0aWFsaXplZC5cbiAgICAvLyBodHRwczovL2dpdGh1Yi5jb20vZmFjZWJvb2svcmVhY3QvaXNzdWVzLzE3NjI2XG5cblxuICAgIGhvb2sucmVuZGVyZXJzLmZvckVhY2goZnVuY3Rpb24gKGluamVjdGVkLCBpZCkge1xuICAgICAgaWYgKHR5cGVvZiBpbmplY3RlZC5zY2hlZHVsZVJlZnJlc2ggPT09ICdmdW5jdGlvbicgJiYgdHlwZW9mIGluamVjdGVkLnNldFJlZnJlc2hIYW5kbGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIFRoaXMgdmVyc2lvbiBzdXBwb3J0cyBSZWFjdCBSZWZyZXNoLlxuICAgICAgICBoZWxwZXJzQnlSZW5kZXJlcklELnNldChpZCwgaW5qZWN0ZWQpO1xuICAgICAgfVxuICAgIH0pOyAvLyBXZSBhbHNvIHdhbnQgdG8gdHJhY2sgY3VycmVudGx5IG1vdW50ZWQgcm9vdHMuXG5cbiAgICB2YXIgb2xkT25Db21taXRGaWJlclJvb3QgPSBob29rLm9uQ29tbWl0RmliZXJSb290O1xuXG4gICAgdmFyIG9sZE9uU2NoZWR1bGVGaWJlclJvb3QgPSBob29rLm9uU2NoZWR1bGVGaWJlclJvb3QgfHwgZnVuY3Rpb24gKCkge307XG5cbiAgICBob29rLm9uU2NoZWR1bGVGaWJlclJvb3QgPSBmdW5jdGlvbiAoaWQsIHJvb3QsIGNoaWxkcmVuKSB7XG4gICAgICBpZiAoIWlzUGVyZm9ybWluZ1JlZnJlc2gpIHtcbiAgICAgICAgLy8gSWYgaXQgd2FzIGludGVudGlvbmFsbHkgc2NoZWR1bGVkLCBkb24ndCBhdHRlbXB0IHRvIHJlc3RvcmUuXG4gICAgICAgIC8vIFRoaXMgaW5jbHVkZXMgaW50ZW50aW9uYWxseSBzY2hlZHVsZWQgdW5tb3VudHMuXG4gICAgICAgIGZhaWxlZFJvb3RzLmRlbGV0ZShyb290KTtcblxuICAgICAgICBpZiAocm9vdEVsZW1lbnRzICE9PSBudWxsKSB7XG4gICAgICAgICAgcm9vdEVsZW1lbnRzLnNldChyb290LCBjaGlsZHJlbik7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgcmV0dXJuIG9sZE9uU2NoZWR1bGVGaWJlclJvb3QuYXBwbHkodGhpcywgYXJndW1lbnRzKTtcbiAgICB9O1xuXG4gICAgaG9vay5vbkNvbW1pdEZpYmVyUm9vdCA9IGZ1bmN0aW9uIChpZCwgcm9vdCwgbWF5YmVQcmlvcml0eUxldmVsLCBkaWRFcnJvcikge1xuICAgICAgdmFyIGhlbHBlcnMgPSBoZWxwZXJzQnlSZW5kZXJlcklELmdldChpZCk7XG5cbiAgICAgIGlmIChoZWxwZXJzICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgaGVscGVyc0J5Um9vdC5zZXQocm9vdCwgaGVscGVycyk7XG4gICAgICAgIHZhciBjdXJyZW50ID0gcm9vdC5jdXJyZW50O1xuICAgICAgICB2YXIgYWx0ZXJuYXRlID0gY3VycmVudC5hbHRlcm5hdGU7IC8vIFdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyByb290IGhhcyBqdXN0ICh1biltb3VudGVkLlxuICAgICAgICAvLyBUaGlzIGxvZ2ljIGlzIGNvcHktcGFzdGVkIGZyb20gc2ltaWxhciBsb2dpYyBpbiB0aGUgRGV2VG9vbHMgYmFja2VuZC5cbiAgICAgICAgLy8gSWYgdGhpcyBicmVha3Mgd2l0aCBzb21lIHJlZmFjdG9yaW5nLCB5b3UnbGwgd2FudCB0byB1cGRhdGUgRGV2VG9vbHMgdG9vLlxuXG4gICAgICAgIGlmIChhbHRlcm5hdGUgIT09IG51bGwpIHtcbiAgICAgICAgICB2YXIgd2FzTW91bnRlZCA9IGFsdGVybmF0ZS5tZW1vaXplZFN0YXRlICE9IG51bGwgJiYgYWx0ZXJuYXRlLm1lbW9pemVkU3RhdGUuZWxlbWVudCAhPSBudWxsICYmIG1vdW50ZWRSb290cy5oYXMocm9vdCk7XG4gICAgICAgICAgdmFyIGlzTW91bnRlZCA9IGN1cnJlbnQubWVtb2l6ZWRTdGF0ZSAhPSBudWxsICYmIGN1cnJlbnQubWVtb2l6ZWRTdGF0ZS5lbGVtZW50ICE9IG51bGw7XG5cbiAgICAgICAgICBpZiAoIXdhc01vdW50ZWQgJiYgaXNNb3VudGVkKSB7XG4gICAgICAgICAgICAvLyBNb3VudCBhIG5ldyByb290LlxuICAgICAgICAgICAgbW91bnRlZFJvb3RzLmFkZChyb290KTtcbiAgICAgICAgICAgIGZhaWxlZFJvb3RzLmRlbGV0ZShyb290KTtcbiAgICAgICAgICB9IGVsc2UgaWYgKHdhc01vdW50ZWQgJiYgaXNNb3VudGVkKSA7IGVsc2UgaWYgKHdhc01vdW50ZWQgJiYgIWlzTW91bnRlZCkge1xuICAgICAgICAgICAgLy8gVW5tb3VudCBhbiBleGlzdGluZyByb290LlxuICAgICAgICAgICAgbW91bnRlZFJvb3RzLmRlbGV0ZShyb290KTtcblxuICAgICAgICAgICAgaWYgKGRpZEVycm9yKSB7XG4gICAgICAgICAgICAgIC8vIFdlJ2xsIHJlbW91bnQgaXQgb24gZnV0dXJlIGVkaXRzLlxuICAgICAgICAgICAgICBmYWlsZWRSb290cy5hZGQocm9vdCk7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICBoZWxwZXJzQnlSb290LmRlbGV0ZShyb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2UgaWYgKCF3YXNNb3VudGVkICYmICFpc01vdW50ZWQpIHtcbiAgICAgICAgICAgIGlmIChkaWRFcnJvcikge1xuICAgICAgICAgICAgICAvLyBXZSdsbCByZW1vdW50IGl0IG9uIGZ1dHVyZSBlZGl0cy5cbiAgICAgICAgICAgICAgZmFpbGVkUm9vdHMuYWRkKHJvb3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAvLyBNb3VudCBhIG5ldyByb290LlxuICAgICAgICAgIG1vdW50ZWRSb290cy5hZGQocm9vdCk7XG4gICAgICAgIH1cbiAgICAgIH0gLy8gQWx3YXlzIGNhbGwgdGhlIGRlY29yYXRlZCBEZXZUb29scyBob29rLlxuXG5cbiAgICAgIHJldHVybiBvbGRPbkNvbW1pdEZpYmVyUm9vdC5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgIH07XG4gIH1cbn1cbmZ1bmN0aW9uIGhhc1VucmVjb3ZlcmFibGVFcnJvcnMoKSB7XG4gIC8vIFRPRE86IGRlbGV0ZSB0aGlzIGFmdGVyIHJlbW92aW5nIGRlcGVuZGVuY3kgaW4gUk4uXG4gIHJldHVybiBmYWxzZTtcbn0gLy8gRXhwb3NlZCBmb3IgdGVzdGluZy5cblxuZnVuY3Rpb24gX2dldE1vdW50ZWRSb290Q291bnQoKSB7XG4gIHtcbiAgICByZXR1cm4gbW91bnRlZFJvb3RzLnNpemU7XG4gIH1cbn0gLy8gVGhpcyBpcyBhIHdyYXBwZXIgb3ZlciBtb3JlIHByaW1pdGl2ZSBmdW5jdGlvbnMgZm9yIHNldHRpbmcgc2lnbmF0dXJlLlxuLy8gU2lnbmF0dXJlcyBsZXQgdXMgZGVjaWRlIHdoZXRoZXIgdGhlIEhvb2sgb3JkZXIgaGFzIGNoYW5nZWQgb24gcmVmcmVzaC5cbi8vXG4vLyBUaGlzIGZ1bmN0aW9uIGlzIGludGVuZGVkIHRvIGJlIHVzZWQgYXMgYSB0cmFuc2Zvcm0gdGFyZ2V0LCBlLmcuOlxuLy8gdmFyIF9zID0gY3JlYXRlU2lnbmF0dXJlRnVuY3Rpb25Gb3JUcmFuc2Zvcm0oKVxuLy9cbi8vIGZ1bmN0aW9uIEhlbGxvKCkge1xuLy8gICBjb25zdCBbZm9vLCBzZXRGb29dID0gdXNlU3RhdGUoMCk7XG4vLyAgIGNvbnN0IHZhbHVlID0gdXNlQ3VzdG9tSG9vaygpO1xuLy8gICBfcygpOyAvKiBDYWxsIHdpdGhvdXQgYXJndW1lbnRzIHRyaWdnZXJzIGNvbGxlY3RpbmcgdGhlIGN1c3RvbSBIb29rIGxpc3QuXG4vLyAgICAgICAgICAqIFRoaXMgZG9lc24ndCBoYXBwZW4gZHVyaW5nIHRoZSBtb2R1bGUgZXZhbHVhdGlvbiBiZWNhdXNlIHdlXG4vLyAgICAgICAgICAqIGRvbid0IHdhbnQgdG8gY2hhbmdlIHRoZSBtb2R1bGUgb3JkZXIgd2l0aCBpbmxpbmUgcmVxdWlyZXMuXG4vLyAgICAgICAgICAqIE5leHQgY2FsbHMgYXJlIG5vb3BzLiAqL1xuLy8gICByZXR1cm4gPGgxPkhpPC9oMT47XG4vLyB9XG4vL1xuLy8gLyogQ2FsbCB3aXRoIGFyZ3VtZW50cyBhdHRhY2hlcyB0aGUgc2lnbmF0dXJlIHRvIHRoZSB0eXBlOiAqL1xuLy8gX3MoXG4vLyAgIEhlbGxvLFxuLy8gICAndXNlU3RhdGV7W2Zvbywgc2V0Rm9vXX0oMCknLFxuLy8gICAoKSA9PiBbdXNlQ3VzdG9tSG9va10sIC8qIExhenkgdG8gYXZvaWQgdHJpZ2dlcmluZyBpbmxpbmUgcmVxdWlyZXMgKi9cbi8vICk7XG5cbmZ1bmN0aW9uIGNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtKCkge1xuICB7XG4gICAgdmFyIHNhdmVkVHlwZTtcbiAgICB2YXIgaGFzQ3VzdG9tSG9va3M7XG4gICAgdmFyIGRpZENvbGxlY3RIb29rcyA9IGZhbHNlO1xuICAgIHJldHVybiBmdW5jdGlvbiAodHlwZSwga2V5LCBmb3JjZVJlc2V0LCBnZXRDdXN0b21Ib29rcykge1xuICAgICAgaWYgKHR5cGVvZiBrZXkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgIC8vIFdlJ3JlIGluIHRoZSBpbml0aWFsIHBoYXNlIHRoYXQgYXNzb2NpYXRlcyBzaWduYXR1cmVzXG4gICAgICAgIC8vIHdpdGggdGhlIGZ1bmN0aW9ucy4gTm90ZSB0aGlzIG1heSBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXNcbiAgICAgICAgLy8gaW4gSE9DIGNoYWlucyBsaWtlIF9zKGhvYzEoX3MoaG9jMihfcyhhY3R1YWxGdW5jdGlvbikpKSkpLlxuICAgICAgICBpZiAoIXNhdmVkVHlwZSkge1xuICAgICAgICAgIC8vIFdlJ3JlIGluIHRoZSBpbm5lcm1vc3QgY2FsbCwgc28gdGhpcyBpcyB0aGUgYWN0dWFsIHR5cGUuXG4gICAgICAgICAgc2F2ZWRUeXBlID0gdHlwZTtcbiAgICAgICAgICBoYXNDdXN0b21Ib29rcyA9IHR5cGVvZiBnZXRDdXN0b21Ib29rcyA9PT0gJ2Z1bmN0aW9uJztcbiAgICAgICAgfSAvLyBTZXQgdGhlIHNpZ25hdHVyZSBmb3IgYWxsIHR5cGVzIChldmVuIHdyYXBwZXJzISkgaW4gY2FzZVxuICAgICAgICAvLyB0aGV5IGhhdmUgbm8gc2lnbmF0dXJlcyBvZiB0aGVpciBvd24uIFRoaXMgaXMgdG8gcHJldmVudFxuICAgICAgICAvLyBwcm9ibGVtcyBsaWtlIGh0dHBzOi8vZ2l0aHViLmNvbS9mYWNlYm9vay9yZWFjdC9pc3N1ZXMvMjA0MTcuXG5cblxuICAgICAgICBpZiAodHlwZSAhPSBudWxsICYmICh0eXBlb2YgdHlwZSA9PT0gJ2Z1bmN0aW9uJyB8fCB0eXBlb2YgdHlwZSA9PT0gJ29iamVjdCcpKSB7XG4gICAgICAgICAgc2V0U2lnbmF0dXJlKHR5cGUsIGtleSwgZm9yY2VSZXNldCwgZ2V0Q3VzdG9tSG9va3MpO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHR5cGU7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBXZSdyZSBpbiB0aGUgX3MoKSBjYWxsIHdpdGhvdXQgYXJndW1lbnRzLCB3aGljaCBtZWFuc1xuICAgICAgICAvLyB0aGlzIGlzIHRoZSB0aW1lIHRvIGNvbGxlY3QgY3VzdG9tIEhvb2sgc2lnbmF0dXJlcy5cbiAgICAgICAgLy8gT25seSBkbyB0aGlzIG9uY2UuIFRoaXMgcGF0aCBpcyBob3QgYW5kIHJ1bnMgKmluc2lkZSogZXZlcnkgcmVuZGVyIVxuICAgICAgICBpZiAoIWRpZENvbGxlY3RIb29rcyAmJiBoYXNDdXN0b21Ib29rcykge1xuICAgICAgICAgIGRpZENvbGxlY3RIb29rcyA9IHRydWU7XG4gICAgICAgICAgY29sbGVjdEN1c3RvbUhvb2tzRm9yU2lnbmF0dXJlKHNhdmVkVHlwZSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9O1xuICB9XG59XG5mdW5jdGlvbiBpc0xpa2VseUNvbXBvbmVudFR5cGUodHlwZSkge1xuICB7XG4gICAgc3dpdGNoICh0eXBlb2YgdHlwZSkge1xuICAgICAgY2FzZSAnZnVuY3Rpb24nOlxuICAgICAgICB7XG4gICAgICAgICAgLy8gRmlyc3QsIGRlYWwgd2l0aCBjbGFzc2VzLlxuICAgICAgICAgIGlmICh0eXBlLnByb3RvdHlwZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBpZiAodHlwZS5wcm90b3R5cGUuaXNSZWFjdENvbXBvbmVudCkge1xuICAgICAgICAgICAgICAvLyBSZWFjdCBjbGFzcy5cbiAgICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHZhciBvd25OYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHR5cGUucHJvdG90eXBlKTtcblxuICAgICAgICAgICAgaWYgKG93bk5hbWVzLmxlbmd0aCA+IDEgfHwgb3duTmFtZXNbMF0gIT09ICdjb25zdHJ1Y3RvcicpIHtcbiAgICAgICAgICAgICAgLy8gVGhpcyBsb29rcyBsaWtlIGEgY2xhc3MuXG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH0gLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLXByb3RvXG5cblxuICAgICAgICAgICAgaWYgKHR5cGUucHJvdG90eXBlLl9fcHJvdG9fXyAhPT0gT2JqZWN0LnByb3RvdHlwZSkge1xuICAgICAgICAgICAgICAvLyBJdCBoYXMgYSBzdXBlcmNsYXNzLlxuICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9IC8vIFBhc3MgdGhyb3VnaC5cbiAgICAgICAgICAgIC8vIFRoaXMgbG9va3MgbGlrZSBhIHJlZ3VsYXIgZnVuY3Rpb24gd2l0aCBlbXB0eSBwcm90b3R5cGUuXG5cbiAgICAgICAgICB9IC8vIEZvciBwbGFpbiBmdW5jdGlvbnMgYW5kIGFycm93cywgdXNlIG5hbWUgYXMgYSBoZXVyaXN0aWMuXG5cblxuICAgICAgICAgIHZhciBuYW1lID0gdHlwZS5uYW1lIHx8IHR5cGUuZGlzcGxheU5hbWU7XG4gICAgICAgICAgcmV0dXJuIHR5cGVvZiBuYW1lID09PSAnc3RyaW5nJyAmJiAvXltBLVpdLy50ZXN0KG5hbWUpO1xuICAgICAgICB9XG5cbiAgICAgIGNhc2UgJ29iamVjdCc6XG4gICAgICAgIHtcbiAgICAgICAgICBpZiAodHlwZSAhPSBudWxsKSB7XG4gICAgICAgICAgICBzd2l0Y2ggKGdldFByb3BlcnR5KHR5cGUsICckJHR5cGVvZicpKSB7XG4gICAgICAgICAgICAgIGNhc2UgUkVBQ1RfRk9SV0FSRF9SRUZfVFlQRTpcbiAgICAgICAgICAgICAgY2FzZSBSRUFDVF9NRU1PX1RZUEU6XG4gICAgICAgICAgICAgICAgLy8gRGVmaW5pdGVseSBSZWFjdCBjb21wb25lbnRzLlxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuXG4gICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICB7XG4gICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgfVxuICB9XG59XG5cbmV4cG9ydHMuX2dldE1vdW50ZWRSb290Q291bnQgPSBfZ2V0TW91bnRlZFJvb3RDb3VudDtcbmV4cG9ydHMuY29sbGVjdEN1c3RvbUhvb2tzRm9yU2lnbmF0dXJlID0gY29sbGVjdEN1c3RvbUhvb2tzRm9yU2lnbmF0dXJlO1xuZXhwb3J0cy5jcmVhdGVTaWduYXR1cmVGdW5jdGlvbkZvclRyYW5zZm9ybSA9IGNyZWF0ZVNpZ25hdHVyZUZ1bmN0aW9uRm9yVHJhbnNmb3JtO1xuZXhwb3J0cy5maW5kQWZmZWN0ZWRIb3N0SW5zdGFuY2VzID0gZmluZEFmZmVjdGVkSG9zdEluc3RhbmNlcztcbmV4cG9ydHMuZ2V0RmFtaWx5QnlJRCA9IGdldEZhbWlseUJ5SUQ7XG5leHBvcnRzLmdldEZhbWlseUJ5VHlwZSA9IGdldEZhbWlseUJ5VHlwZTtcbmV4cG9ydHMuaGFzVW5yZWNvdmVyYWJsZUVycm9ycyA9IGhhc1VucmVjb3ZlcmFibGVFcnJvcnM7XG5leHBvcnRzLmluamVjdEludG9HbG9iYWxIb29rID0gaW5qZWN0SW50b0dsb2JhbEhvb2s7XG5leHBvcnRzLmlzTGlrZWx5Q29tcG9uZW50VHlwZSA9IGlzTGlrZWx5Q29tcG9uZW50VHlwZTtcbmV4cG9ydHMucGVyZm9ybVJlYWN0UmVmcmVzaCA9IHBlcmZvcm1SZWFjdFJlZnJlc2g7XG5leHBvcnRzLnJlZ2lzdGVyID0gcmVnaXN0ZXI7XG5leHBvcnRzLnNldFNpZ25hdHVyZSA9IHNldFNpZ25hdHVyZTtcbiAgfSkoKTtcbn1cbiIsIid1c2Ugc3RyaWN0JztcblxuaWYgKHByb2Nlc3MuZW52Lk5PREVfRU5WID09PSAncHJvZHVjdGlvbicpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL2Nqcy9yZWFjdC1yZWZyZXNoLXJ1bnRpbWUucHJvZHVjdGlvbi5taW4uanMnKTtcbn0gZWxzZSB7XG4gIG1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi9janMvcmVhY3QtcmVmcmVzaC1ydW50aW1lLmRldmVsb3BtZW50LmpzJyk7XG59XG4iXSwibmFtZXMiOlsicmVxdWly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