code: function reduce(buffer, chunks, chunk, deep = false) {
    if (Buffer.isBuffer(chunk)) {
      return Buffer.concat([buffer, chunk], buffer.length + chunk.length);
    } else if (isTemplateResult(chunk)) {
      if (deep) {
        return reduce(buffer, chunks, chunk.read(deep), deep);
      } else {
        chunks.push(buffer, chunk);
        return emptyStringBuffer;
      }
    } else if (Array.isArray(chunk)) {
      return chunk.reduce((buffer, chunk) => reduce(buffer, chunks, chunk), buffer);
    } else if (isPromise(chunk) || isAsyncIterator(chunk)) {
      chunks.push(buffer, chunk);
      return emptyStringBuffer;
    }
  }
docs: Commit "chunk" to string "buffer".
  Returns new "buffer" value.
  
  @param { Buffer } buffer
  @param { Array<any> } chunks
  @param { any } chunk
  @param { boolean } [deep]
  @returns { Buffer }