UNPKG

789 BJavaScriptView Raw
1/* @flow */
2
3const MAX_STACK_DEPTH = 1000
4
5export function createWriteFunction (
6 write: (text: string, next: Function) => boolean,
7 onError: Function
8): Function {
9 let stackDepth = 0
10 const cachedWrite = (text, next) => {
11 if (text && cachedWrite.caching) {
12 cachedWrite.cacheBuffer[cachedWrite.cacheBuffer.length - 1] += text
13 }
14 const waitForNext = write(text, next)
15 if (waitForNext !== true) {
16 if (stackDepth >= MAX_STACK_DEPTH) {
17 process.nextTick(() => {
18 try { next() } catch (e) {
19 onError(e)
20 }
21 })
22 } else {
23 stackDepth++
24 next()
25 stackDepth--
26 }
27 }
28 }
29 cachedWrite.caching = false
30 cachedWrite.cacheBuffer = []
31 cachedWrite.componentBuffer = []
32 return cachedWrite
33}