var tern=require("./tern"),fs=require("fs"),path=require("path"),url=require("url"),glob=require("glob"),minimatch=require("minimatch"),resolveFrom=require("resolve-from"),projectFileName=".tern-project",portFileName=".tern-port";function findProjectDir(){for(var dir=process.cwd();;){try{if(fs.statSync(path.resolve(dir,projectFileName)).isFile())return dir}catch(e){}var shorter=path.dirname(dir);if(shorter==dir)return null;dir=shorter}}var defaultConfig={libs:[],loadEagerly:!1,plugins:{doc_comment:!0},ecmaScript:!0,ecmaVersion:9,dependencyBudget:tern.defaultOptions.dependencyBudget},homeDir=process.env.HOME||process.env.USERPROFILE;function readJSON(fileName){var file=fs.readFileSync(fileName,"utf8");try{return JSON.parse(file)}catch(e){console.error("Bad JSON in "+fileName+": "+e.message),process.exit(1)}}function readProjectFile(fileName){var data=readJSON(fileName),name;for(var option in defaultConfig)if(data.hasOwnProperty(option)){if("plugins"==option)for(name in defaultConfig.plugins)Object.prototype.hasOwnProperty.call(data.plugins,name)||(data.plugins[name]=defaultConfig.plugins[name])}else data[option]=defaultConfig[option];return data}function findFile(file,projectDir,fallbackDir,options){var local=path.resolve(projectDir,file);if(!options.disableLoadingLocal&&fs.existsSync(local))return local;var shared=path.resolve(fallbackDir,file);return fs.existsSync(shared)?shared:void 0}homeDir&&fs.existsSync(path.resolve(homeDir,".tern-config"))&&(defaultConfig=readProjectFile(path.resolve(homeDir,".tern-config")));var distDir=path.resolve(__dirname,"..");function findDefs(projectDir,config,options){var defs=[],src=config.libs.slice();config.ecmaScript&&-1==src.indexOf("ecmascript")&&src.unshift("ecmascript");for(var i=0;i