code: async function createRowStream(source, encoding, parserOptions) {
    const parser = csv.parse({ltrim: true, relax_column_count: true, ...parserOptions})
    let stream
  
    // Stream factory
    if (isFunction(source)) {
      stream = source()
  
    // Node stream
    } else if (source.readable) {
      stream = source
  
    // Inline source
    } else if (isArray(source)) {
      stream = new Readable({objectMode: true})
      for (const row of source) stream.push(row)
      stream.push(null)
  
    // Remote source
    // For now only utf-8 encoding is supported:
    // https://github.com/axios/axios/issues/332
    } else if (helpers.isRemotePath(source)) {
      if (config.IS_BROWSER) {
        const response = await axios.get(source)
        stream = new Readable()
        stream.push(response.data)
        stream.push(null)
      } else {
        const response = await axios.get(source, {responseType: 'stream'})
        stream = response.data
      }
  
    // Local source
    } else {
      if (config.IS_BROWSER) {
        throw new TableSchemaError('Local paths are not supported in the browser')
      } else {
        stream = fs.createReadStream(source)
        stream.setEncoding(encoding)
      }
    }
  
    // Parse CSV unless it's already parsed
    if (!isArray(source)) {
      if (parserOptions.delimiter === undefined) {
        const csvDelimiterDetector = createCsvDelimiterDetector(parser)
        stream.pipe(csvDelimiterDetector)
      }
      stream = stream.pipe(parser)
    }
  
    return stream
  }
docs: Internal