“use strict”;

Object.defineProperty(exports, “__esModule”, {

value: true

}); exports.findPackageData = findPackageData;

function _path() {

const data = _interopRequireDefault(require("path"));

_path = function () {
  return data;
};

return data;

}

var _utils = require(“./utils”);

function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }

const PACKAGE_FILENAME = “package.json”;

function findPackageData(filepath) {

let pkg = null;
const directories = [];
let isPackage = true;

let dirname = _path().default.dirname(filepath);

while (!pkg && _path().default.basename(dirname) !== "node_modules") {
  directories.push(dirname);
  pkg = readConfigPackage(_path().default.join(dirname, PACKAGE_FILENAME));

  const nextLoc = _path().default.dirname(dirname);

  if (dirname === nextLoc) {
    isPackage = false;
    break;
  }

  dirname = nextLoc;
}

return {
  filepath,
  directories,
  pkg,
  isPackage
};

}

const readConfigPackage = (0, _utils.makeStaticFileCache)((filepath, content) => {

let options;

try {
  options = JSON.parse(content);
} catch (err) {
  err.message = `${filepath}: Error while parsing JSON - ${err.message}`;
  throw err;
}

if (typeof options !== "object") {
  throw new Error(`${filepath}: Config returned typeof ${typeof options}`);
}

if (Array.isArray(options)) {
  throw new Error(`${filepath}: Expected config object but found array`);
}

return {
  filepath,
  dirname: _path().default.dirname(filepath),
  options
};

});