text: 'use strict'
  
  var Buffer = require('buffer').Buffer
  var ta2str = (function () {
    if (global.TextDecoder) {
      var decoder = new TextDecoder('utf-8')
      return decoder.decode.bind(decoder)
    } else {
      return function ta2str (ta) {
        return ta2buf(ta).toString()
      }
    }
  })()
  
  var ab2str = (function () {
    if (global.TextDecoder) {
      var decoder = new TextDecoder('utf-8')
      return decoder.decode.bind(decoder)
    } else {
      return function ab2str (ab) {
        return Buffer.from(ab).toString()
      }
    }
  })()
  
  function ta2buf (ta) {
    var buf = Buffer.from(ta.buffer)
  
    if (ta.byteLength === ta.buffer.byteLength) {
      return buf
    } else {
      return buf.slice(ta.byteOffset, ta.byteOffset + ta.byteLength)
    }
  }
  
  module.exports = function (data, asBuffer) {
    if (data instanceof Uint8Array) {
      return asBuffer ? ta2buf(data) : ta2str(data)
    } else if (data instanceof ArrayBuffer) {
      return asBuffer ? Buffer.from(data) : ab2str(data)
    } else {
      return asBuffer ? Buffer.from(String(data)) : String(data)
    }
  }
  