'use strict'

const gfs = require('graceful-fs')

function readSafe (source, cache) {
  if (cache && cache.files && cache.files.has(source)) {
    return cache.files.get(source)
  }

  const promise = new Promise((resolve, reject) => {
    gfs.readFile(source, (err, contents) => {
      if (err) {
        if (err.code === 'ENOENT') {
          resolve(null)
        } else {
          reject(err)
        }
      } else {
        resolve(contents)
      }
    })
  })

  if (cache && cache.files) {
    cache.files.set(source, promise)
  }
  return promise
}
module.exports = readSafe