@@ -74,6 +74,11 @@ export {
7474  hoistResourcesToRoot , 
7575}  from  './ReactDOMFloatServer' ; 
7676
77+ import  completeSegmentFunction  from  './fizz-instruction-set/completeSegmentFunctionString' ; 
78+ import  completeBoundaryFunction  from  './fizz-instruction-set/completeBoundaryFunctionString' ; 
79+ import  styleInsertionFunction  from  './fizz-instruction-set/styleInsertionFunctionString' ; 
80+ import  clientRenderFunction  from  './fizz-instruction-set/clientRenderFunctionString' ; 
81+ 
7782import  ReactDOMSharedInternals  from  'shared/ReactDOMSharedInternals' ; 
7883const  ReactDOMCurrentDispatcher  =  ReactDOMSharedInternals . Dispatcher ; 
7984
@@ -2021,219 +2026,6 @@ export function writeEndSegment(
20212026  } 
20222027} 
20232028
2024- // Instruction Set 
2025- 
2026- // The following code is the source scripts that we then minify and inline below, 
2027- // with renamed function names that we hope don't collide: 
2028- 
2029- // const COMMENT_NODE = 8; 
2030- // const SUSPENSE_START_DATA = '$'; 
2031- // const SUSPENSE_END_DATA = '/$'; 
2032- // const SUSPENSE_PENDING_START_DATA = '$?'; 
2033- // const SUSPENSE_FALLBACK_START_DATA = '$!'; 
2034- // const LOADED = 'l'; 
2035- // const ERRORED = 'e'; 
2036- 
2037- // function clientRenderBoundary(suspenseBoundaryID, errorDigest, errorMsg, errorComponentStack) { 
2038- //   // Find the fallback's first element. 
2039- //   const suspenseIdNode = document.getElementById(suspenseBoundaryID); 
2040- //   if (!suspenseIdNode) { 
2041- //     // The user must have already navigated away from this tree. 
2042- //     // E.g. because the parent was hydrated. 
2043- //     return; 
2044- //   } 
2045- //   // Find the boundary around the fallback. This is always the previous node. 
2046- //   const suspenseNode = suspenseIdNode.previousSibling; 
2047- //   // Tag it to be client rendered. 
2048- //   suspenseNode.data = SUSPENSE_FALLBACK_START_DATA; 
2049- //   // assign error metadata to first sibling 
2050- //   let dataset = suspenseIdNode.dataset; 
2051- //   if (errorDigest) dataset.dgst = errorDigest; 
2052- //   if (errorMsg) dataset.msg = errorMsg; 
2053- //   if (errorComponentStack) dataset.stck = errorComponentStack; 
2054- //   // Tell React to retry it if the parent already hydrated. 
2055- //   if (suspenseNode._reactRetry) { 
2056- //     suspenseNode._reactRetry(); 
2057- //   } 
2058- // } 
2059- 
2060- // resourceMap = new Map(); 
2061- // function completeBoundaryWithStyles(suspenseBoundaryID, contentID, styles) { 
2062- //   const precedences = new Map(); 
2063- //   const thisDocument = document; 
2064- //   let lastResource, node; 
2065- 
2066- //   // Seed the precedence list with existing resources 
2067- //   let nodes = thisDocument.querySelectorAll('link[data-rprec]'); 
2068- //   for (let i = 0;node = nodes[i++];) { 
2069- //     precedences.set(node.dataset.rprec, lastResource = node); 
2070- //   } 
2071- 
2072- //   let i = 0; 
2073- //   let dependencies = []; 
2074- //   let style, href, precedence, attr, loadingState, resourceEl; 
2075- 
2076- //   function setStatus(s) { 
2077- //     this.s = s; 
2078- //   } 
2079- 
2080- //   while (style = styles[i++]) { 
2081- //     let j = 0; 
2082- //     href = style[j++]; 
2083- //     // We check if this resource is already in our resourceMap and reuse it if so. 
2084- //     // If it is already loaded we don't return it as a depenendency since there is nothing 
2085- //     // to wait for 
2086- //     loadingState = resourceMap.get(href); 
2087- //     if (loadingState) { 
2088- //       if (loadingState.s !== 'l') { 
2089- //         dependencies.push(loadingState); 
2090- //       } 
2091- //       continue; 
2092- //     } 
2093- 
2094- //     // We construct our new resource element, looping over remaining attributes if any 
2095- //     // setting them to the Element. 
2096- //     resourceEl = thisDocument.createElement("link"); 
2097- //     resourceEl.href = href; 
2098- //     resourceEl.rel = 'stylesheet'; 
2099- //     resourceEl.dataset.rprec = precedence = style[j++]; 
2100- //     while(attr = style[j++]) { 
2101- //       resourceEl.setAttribute(attr, style[j++]); 
2102- //     } 
2103- 
2104- //     // We stash a pending promise in our map by href which will resolve or reject 
2105- //     // when the underlying resource loads or errors. We add it to the dependencies 
2106- //     // array to be returned. 
2107- //     loadingState = resourceEl._p = new Promise((re, rj) => { 
2108- //       resourceEl.onload = re; 
2109- //       resourceEl.onerror = rj; 
2110- //     }) 
2111- //     loadingState.then( 
2112- //       setStatus.bind(loadingState, LOADED), 
2113- //       setStatus.bind(loadingState, ERRORED) 
2114- //     ); 
2115- //     resourceMap.set(href, loadingState); 
2116- //     dependencies.push(loadingState); 
2117- 
2118- //     // The prior style resource is the last one placed at a given 
2119- //     // precedence or the last resource itself which may be null. 
2120- //     // We grab this value and then update the last resource for this 
2121- //     // precedence to be the inserted element, updating the lastResource 
2122- //     // pointer if needed. 
2123- //     let prior = precedences.get(precedence) || lastResource; 
2124- //     if (prior === lastResource) { 
2125- //       lastResource = resourceEl 
2126- //     } 
2127- //     precedences.set(precedence, resourceEl) 
2128- 
2129- //     // Finally, we insert the newly constructed instance at an appropriate location 
2130- //     // in the Document. 
2131- //     if (prior) { 
2132- //       prior.parentNode.insertBefore(resourceEl, prior.nextSibling); 
2133- //     } else { 
2134- //       let head = thisDocument.head; 
2135- //       head.insertBefore(resourceEl, head.firstChild); 
2136- //     } 
2137- //   } 
2138- 
2139- //   Promise.all(dependencies).then( 
2140- //     completeBoundary.bind(null, suspenseBoundaryID, contentID, ''), 
2141- //     completeBoundary.bind(null, suspenseBoundaryID, contentID, "Resource failed to load") 
2142- //   ); 
2143- // } 
2144- 
2145- // function completeBoundary(suspenseBoundaryID, contentID, errorDigest) { 
2146- //   const contentNode = document.getElementById(contentID); 
2147- //   // We'll detach the content node so that regardless of what happens next we don't leave in the tree. 
2148- //   // This might also help by not causing recalcing each time we move a child from here to the target. 
2149- //   contentNode.parentNode.removeChild(contentNode); 
2150- 
2151- //   // Find the fallback's first element. 
2152- //   const suspenseIdNode = document.getElementById(suspenseBoundaryID); 
2153- //   if (!suspenseIdNode) { 
2154- //     // The user must have already navigated away from this tree. 
2155- //     // E.g. because the parent was hydrated. That's fine there's nothing to do 
2156- //     // but we have to make sure that we already deleted the container node. 
2157- //     return; 
2158- //   } 
2159- //   // Find the boundary around the fallback. This is always the previous node. 
2160- //   const suspenseNode = suspenseIdNode.previousSibling; 
2161- 
2162- //   if (!errorDigest) { 
2163- //     // Clear all the existing children. This is complicated because 
2164- //     // there can be embedded Suspense boundaries in the fallback. 
2165- //     // This is similar to clearSuspenseBoundary in ReactDOMHostConfig. 
2166- //     // TODO: We could avoid this if we never emitted suspense boundaries in fallback trees. 
2167- //     // They never hydrate anyway. However, currently we support incrementally loading the fallback. 
2168- //     const parentInstance = suspenseNode.parentNode; 
2169- //     let node = suspenseNode.nextSibling; 
2170- //     let depth = 0; 
2171- //     do { 
2172- //       if (node && node.nodeType === COMMENT_NODE) { 
2173- //         const data = node.data; 
2174- //         if (data === SUSPENSE_END_DATA) { 
2175- //           if (depth === 0) { 
2176- //             break; 
2177- //           } else { 
2178- //             depth--; 
2179- //           } 
2180- //         } else if ( 
2181- //           data === SUSPENSE_START_DATA || 
2182- //           data === SUSPENSE_PENDING_START_DATA || 
2183- //           data === SUSPENSE_FALLBACK_START_DATA 
2184- //         ) { 
2185- //           depth++; 
2186- //         } 
2187- //       } 
2188- 
2189- //       const nextNode = node.nextSibling; 
2190- //       parentInstance.removeChild(node); 
2191- //       node = nextNode; 
2192- //     } while (node); 
2193- 
2194- //     const endOfBoundary = node; 
2195- 
2196- //     // Insert all the children from the contentNode between the start and end of suspense boundary. 
2197- //     while (contentNode.firstChild) { 
2198- //       parentInstance.insertBefore(contentNode.firstChild, endOfBoundary); 
2199- //     } 
2200- 
2201- //     suspenseNode.data = SUSPENSE_START_DATA; 
2202- //   } else { 
2203- //     suspenseNode.data = SUSPENSE_FALLBACK_START_DATA; 
2204- //     suspenseIdNode.setAttribute('data-dgst', errorDigest) 
2205- //   } 
2206- 
2207- //   if (suspenseNode._reactRetry) { 
2208- //     suspenseNode._reactRetry(); 
2209- //   } 
2210- // } 
2211- 
2212- // function completeSegment(containerID, placeholderID) { 
2213- //   const segmentContainer = document.getElementById(containerID); 
2214- //   const placeholderNode = document.getElementById(placeholderID); 
2215- //   // We always expect both nodes to exist here because, while we might 
2216- //   // have navigated away from the main tree, we still expect the detached 
2217- //   // tree to exist. 
2218- //   segmentContainer.parentNode.removeChild(segmentContainer); 
2219- //   while (segmentContainer.firstChild) { 
2220- //     placeholderNode.parentNode.insertBefore( 
2221- //       segmentContainer.firstChild, 
2222- //       placeholderNode, 
2223- //     ); 
2224- //   } 
2225- //   placeholderNode.parentNode.removeChild(placeholderNode); 
2226- // } 
2227- 
2228- const  completeSegmentFunction  = 
2229-   'function $RS(a,b){a=document.getElementById(a);b=document.getElementById(b);for(a.parentNode.removeChild(a);a.firstChild;)b.parentNode.insertBefore(a.firstChild,b);b.parentNode.removeChild(b)}' ; 
2230- const  completeBoundaryFunction  = 
2231-   'function $RC(b,c,d){c=document.getElementById(c);c.parentNode.removeChild(c);var a=document.getElementById(b);if(a){b=a.previousSibling;if(d)b.data="$!",a.setAttribute("data-dgst",d);else{d=b.parentNode;a=b.nextSibling;var e=0;do{if(a&&a.nodeType===8){var h=a.data;if(h==="/$")if(0===e)break;else e--;else h!=="$"&&h!=="$?"&&h!=="$!"||e++}h=a.nextSibling;d.removeChild(a);a=h}while(a);for(;c.firstChild;)d.insertBefore(c.firstChild,a);b.data="$"}b._reactRetry&&b._reactRetry()}}' ; 
2232- const  styleInsertionFunction  = 
2233-   '$RM=new Map;function $RR(p,q,t){function r(l){this.s=l}for(var m=new Map,n=document,g,e,f=n.querySelectorAll("link[data-rprec]"),d=0;e=f[d++];)m.set(e.dataset.rprec,g=e);e=0;f=[];for(var c,h,b,a;c=t[e++];){var k=0;h=c[k++];if(b=$RM.get(h))"l"!==b.s&&f.push(b);else{a=n.createElement("link");a.href=h;a.rel="stylesheet";for(a.dataset.rprec=d=c[k++];b=c[k++];)a.setAttribute(b,c[k++]);b=a._p=new Promise(function(l,u){a.onload=l;a.onerror=u});b.then(r.bind(b,"l"),r.bind(b,"e"));$RM.set(h,b);f.push(b);c=m.get(d)||g;c===g&&(g=a);m.set(d,a);c?c.parentNode.insertBefore(a,c.nextSibling):(d=n.head,d.insertBefore(a,d.firstChild))}}Promise.all(f).then($RC.bind(null,p,q,""),$RC.bind(null,p,q,"Resource failed to load"))}' ; 
2234- const  clientRenderFunction  = 
2235-   'function $RX(b,c,d,e){var a=document.getElementById(b);a&&(b=a.previousSibling,b.data="$!",a=a.dataset,c&&(a.dgst=c),d&&(a.msg=d),e&&(a.stck=e),b._reactRetry&&b._reactRetry())}' ; 
2236- 
22372029const  completeSegmentScript1Full  =  stringToPrecomputedChunk ( 
22382030  completeSegmentFunction  +  ';$RS("' , 
22392031) ; 
0 commit comments