( buffer: SSRBuffer, parentRet: string, startIndex: number, )
| 12 | const { isVNode } = ssrUtils |
| 13 | |
| 14 | function nestedUnrollBuffer( |
| 15 | buffer: SSRBuffer, |
| 16 | parentRet: string, |
| 17 | startIndex: number, |
| 18 | ): Promise<string> | string { |
| 19 | if (!buffer.hasAsync) { |
| 20 | return parentRet + unrollBufferSync(buffer) |
| 21 | } |
| 22 | |
| 23 | let ret = parentRet |
| 24 | for (let i = startIndex; i < buffer.length; i += 1) { |
| 25 | const item = buffer[i] |
| 26 | if (isString(item)) { |
| 27 | ret += item |
| 28 | continue |
| 29 | } |
| 30 | |
| 31 | if (isPromise(item)) { |
| 32 | return item.then(nestedItem => { |
| 33 | buffer[i] = nestedItem |
| 34 | return nestedUnrollBuffer(buffer, ret, i) |
| 35 | }) |
| 36 | } |
| 37 | |
| 38 | const result = nestedUnrollBuffer(item, ret, 0) |
| 39 | if (isPromise(result)) { |
| 40 | return result.then(nestedItem => { |
| 41 | buffer[i] = nestedItem |
| 42 | return nestedUnrollBuffer(buffer, '', i) |
| 43 | }) |
| 44 | } |
| 45 | |
| 46 | ret = result |
| 47 | } |
| 48 | |
| 49 | return ret |
| 50 | } |
| 51 | |
| 52 | export function unrollBuffer(buffer: SSRBuffer): Promise<string> | string { |
| 53 | return nestedUnrollBuffer(buffer, '', 0) |
no test coverage detected