"use strict"

const crypto = require('crypto')
    , moduleRequire = require('eslint-module-utils/module-require').default
    , hashObject = require('eslint-module-utils/hash').hashObject

const cache = new Map()

// must match ESLint default options or we'll miss the cache every time
const parserOptions = {
  loc: true,
  range: true,
  raw: true,
  tokens: true,
  comment: true,
  attachComment: true,
}

exports.parse = function parse(content, options) {
  options = Object.assign({}, options, parserOptions)

  if (!options.filePath) {
    throw new Error("no file path provided!")
  }

  const keyHash = crypto.createHash('sha256')
  keyHash.update(content)
  hashObject(options, keyHash)

  const key = keyHash.digest('hex')

  let ast = cache.get(key)
  if (ast != null) return ast

  const realParser = moduleRequire(options.parser)

  ast = realParser.parse(content, options)
  cache.set(key, ast)

  return ast
}
