text: var isBinaryFile = require('isbinaryfile')
  var fs = require('fs-extra')
  var path = require('path')
  var pathModule = require('path')
  
  module.exports = {
    absolutePath: absolutePath,
    relativePath: relativePath,
    walkSync: walkSync,
    resolveDirectory: resolveDirectory
  }
  
  /**
   * returns the absolute path of the given @arg path
   *
   * @param {String} path - relative path (Unix style which is the one used by Remix IDE)
   * @param {String} sharedFolder - absolute shared path. platform dependent representation.
   * @return {String} platform dependent absolute path (/home/user1/.../... for unix, c:\user\...\... for windows)
   */
  function absolutePath (path, sharedFolder) {
    path = normalizePath(path)
    if (path.indexOf(sharedFolder) !== 0) {
      path = pathModule.resolve(sharedFolder, path)
    }
    return path
  }
  
  /**
   * return the relative path of the given @arg path
   *
   * @param {String} path - absolute platform dependent path
   * @param {String} sharedFolder - absolute shared path. platform dependent representation
   * @return {String} relative path (Unix style which is the one used by Remix IDE)
   */
  function relativePath (path, sharedFolder) {
    var relative = pathModule.relative(sharedFolder, path)
    return normalizePath(relative)
  }
  
  function normalizePath (path) {
    if (process.platform === 'win32') {
      return path.replace(/\\/g, '/')
    }
    return path
  }
  
  function walkSync (dir, filelist, sharedFolder) {
    var files = fs.readdirSync(dir)
    filelist = filelist || {}
    files.forEach(function (file) {
      var subElement = path.join(dir, file)
      if (!fs.lstatSync(subElement).isSymbolicLink()) {
        if (fs.statSync(subElement).isDirectory()) {
          filelist = walkSync(subElement, filelist, sharedFolder)
        } else {
          var relative = relativePath(subElement, sharedFolder)
          filelist[relative] = isBinaryFile.sync(subElement)
        }
      }
    })
    return filelist
  }
  
  function resolveDirectory (dir, sharedFolder) {
    var ret = {}
    var files = fs.readdirSync(dir)
    files.forEach(function (file) {
      var subElement = path.join(dir, file)
      if (!fs.lstatSync(subElement).isSymbolicLink()) {
        var relative = relativePath(subElement, sharedFolder)
        ret[relative] = { isDirectory: fs.statSync(subElement).isDirectory() }
      }
    })
    return ret
  }
  