app-index.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", {
  3. value: true
  4. });
  5. exports.hydrate = hydrate;
  6. exports.version = void 0;
  7. var _interop_require_default = require("@swc/helpers/lib/_interop_require_default.js").default;
  8. var _interop_require_wildcard = require("@swc/helpers/lib/_interop_require_wildcard.js").default;
  9. require("../build/polyfills/polyfill-module");
  10. var _client = _interop_require_default(require("react-dom/client"));
  11. var _react = _interop_require_wildcard(require("react"));
  12. var _reactServerDomWebpack = require("next/dist/compiled/react-server-dom-webpack");
  13. var _performanceRelayer = _interop_require_default(require("./performance-relayer"));
  14. // eslint-disable-next-line no-undef
  15. const getChunkScriptFilename = __webpack_require__.u;
  16. const chunkFilenameMap = {};
  17. // eslint-disable-next-line no-undef
  18. __webpack_require__.u = (chunkId)=>{
  19. return chunkFilenameMap[chunkId] || getChunkScriptFilename(chunkId);
  20. };
  21. // Ignore the module ID transform in client.
  22. // eslint-disable-next-line no-undef
  23. // @ts-expect-error TODO: fix type
  24. self.__next_require__ = __webpack_require__;
  25. self.__next_chunk_load__ = (chunk)=>{
  26. if (!chunk) return Promise.resolve();
  27. const [chunkId, chunkFileName] = chunk.split(':');
  28. chunkFilenameMap[chunkId] = `static/chunks/${chunkFileName}.js`;
  29. // @ts-ignore
  30. // eslint-disable-next-line no-undef
  31. return __webpack_chunk_load__(chunkId);
  32. };
  33. const version = "12.3.4";
  34. exports.version = version;
  35. const appElement = document;
  36. const getCacheKey = ()=>{
  37. const { pathname , search } = location;
  38. return pathname + search;
  39. };
  40. const encoder = new TextEncoder();
  41. let initialServerDataBuffer = undefined;
  42. let initialServerDataWriter = undefined;
  43. let initialServerDataLoaded = false;
  44. let initialServerDataFlushed = false;
  45. function nextServerDataCallback(seg) {
  46. if (seg[0] === 0) {
  47. initialServerDataBuffer = [];
  48. } else {
  49. if (!initialServerDataBuffer) throw new Error('Unexpected server data: missing bootstrap script.');
  50. if (initialServerDataWriter) {
  51. initialServerDataWriter.enqueue(encoder.encode(seg[1]));
  52. } else {
  53. initialServerDataBuffer.push(seg[1]);
  54. }
  55. }
  56. }
  57. // There might be race conditions between `nextServerDataRegisterWriter` and
  58. // `DOMContentLoaded`. The former will be called when React starts to hydrate
  59. // the root, the latter will be called when the DOM is fully loaded.
  60. // For streaming, the former is called first due to partial hydration.
  61. // For non-streaming, the latter can be called first.
  62. // Hence, we use two variables `initialServerDataLoaded` and
  63. // `initialServerDataFlushed` to make sure the writer will be closed and
  64. // `initialServerDataBuffer` will be cleared in the right time.
  65. function nextServerDataRegisterWriter(ctr) {
  66. if (initialServerDataBuffer) {
  67. initialServerDataBuffer.forEach((val)=>{
  68. ctr.enqueue(encoder.encode(val));
  69. });
  70. if (initialServerDataLoaded && !initialServerDataFlushed) {
  71. ctr.close();
  72. initialServerDataFlushed = true;
  73. initialServerDataBuffer = undefined;
  74. }
  75. }
  76. initialServerDataWriter = ctr;
  77. }
  78. // When `DOMContentLoaded`, we can close all pending writers to finish hydration.
  79. const DOMContentLoaded = function() {
  80. if (initialServerDataWriter && !initialServerDataFlushed) {
  81. initialServerDataWriter.close();
  82. initialServerDataFlushed = true;
  83. initialServerDataBuffer = undefined;
  84. }
  85. initialServerDataLoaded = true;
  86. };
  87. // It's possible that the DOM is already loaded.
  88. if (document.readyState === 'loading') {
  89. document.addEventListener('DOMContentLoaded', DOMContentLoaded, false);
  90. } else {
  91. DOMContentLoaded();
  92. }
  93. const nextServerDataLoadingGlobal = self.__next_s = self.__next_s || [];
  94. nextServerDataLoadingGlobal.forEach(nextServerDataCallback);
  95. nextServerDataLoadingGlobal.push = nextServerDataCallback;
  96. function createResponseCache() {
  97. return new Map();
  98. }
  99. const rscCache = createResponseCache();
  100. function useInitialServerResponse(cacheKey) {
  101. const response = rscCache.get(cacheKey);
  102. if (response) return response;
  103. const readable = new ReadableStream({
  104. start (controller) {
  105. nextServerDataRegisterWriter(controller);
  106. }
  107. });
  108. const newResponse = (0, _reactServerDomWebpack).createFromReadableStream(readable);
  109. rscCache.set(cacheKey, newResponse);
  110. return newResponse;
  111. }
  112. function ServerRoot({ cacheKey }) {
  113. _react.default.useEffect(()=>{
  114. rscCache.delete(cacheKey);
  115. });
  116. const response = useInitialServerResponse(cacheKey);
  117. const root = (0, _react).experimental_use(response);
  118. return root;
  119. }
  120. function Root({ children }) {
  121. _react.default.useEffect(()=>{
  122. (0, _performanceRelayer).default();
  123. }, []);
  124. if (process.env.__NEXT_TEST_MODE) {
  125. // eslint-disable-next-line react-hooks/rules-of-hooks
  126. _react.default.useEffect(()=>{
  127. window.__NEXT_HYDRATED = true;
  128. if (window.__NEXT_HYDRATED_CB) {
  129. window.__NEXT_HYDRATED_CB();
  130. }
  131. }, []);
  132. }
  133. return children;
  134. }
  135. function RSCComponent(props) {
  136. const cacheKey = getCacheKey();
  137. return /*#__PURE__*/ _react.default.createElement(ServerRoot, Object.assign({}, props, {
  138. cacheKey: cacheKey
  139. }));
  140. }
  141. function hydrate() {
  142. const reactEl = /*#__PURE__*/ _react.default.createElement(_react.default.StrictMode, null, /*#__PURE__*/ _react.default.createElement(Root, null, /*#__PURE__*/ _react.default.createElement(RSCComponent, null)));
  143. const isError = document.documentElement.id === '__next_error__';
  144. const reactRoot = isError ? _client.default.createRoot(appElement) : _client.default.hydrateRoot(appElement, reactEl);
  145. if (isError) {
  146. reactRoot.render(reactEl);
  147. }
  148. }
  149. if ((typeof exports.default === 'function' || (typeof exports.default === 'object' && exports.default !== null)) && typeof exports.default.__esModule === 'undefined') {
  150. Object.defineProperty(exports.default, '__esModule', { value: true });
  151. Object.assign(exports.default, exports);
  152. module.exports = exports.default;
  153. }
  154. //# sourceMappingURL=app-index.js.map