'use strict'

const os = require('os')
const passwdUser = require('passwd-user')
const path = require('path')

module.exports = function (aPath) {
  if (!aPath.startsWith('~')) {
    return aPath
  }

  const sepIndex = aPath.indexOf(path.sep)
  const user = (sepIndex < 0) ? aPath.substring(1) : aPath.substring(1, sepIndex)
  const rest = (sepIndex < 0) ? '' : aPath.substring(sepIndex)
  const home = (user === '') ? os.homedir() : (() => {
    const passwd = passwdUser.sync(user)
    if (passwd === undefined) {
      throw new Error(`Failed to expand the tilde in ${aPath} - user "${user}" does not exist`)
    }
    return passwd.homedir
  })()

  return `${home}${rest}`
}
