define(function(require,exports,module){const CodeInspection=require("language/CodeInspection"),StringUtils=require("utils/StringUtils"),Strings=require("strings"),semver=require("thirdparty/semver.browser"),NpmRegistry=require("./NpmRegistry"),NpmHints=require("./NpmHints"),PACKAGE_JSON_RE=/(^|\/)package\.json$/,MAX_ADVISORIES_PER_DEP=3,MAX_DEPS_PER_SCAN=150,_resultsByPath=new Map,_refreshing=new Map;function _matchBrace(text,openBrace){let depth=0,i=openBrace;for(;iMAX_DEPS_PER_SCAN&&(entries=entries.slice(0,MAX_DEPS_PER_SCAN));const depHash=_depHash(entries),cached=_resultsByPath.get(fullPath);cached&&cached.depHash===depHash||_refreshing.get(fullPath)||(_refreshing.set(fullPath,!0),_computeErrors(entries).then(function(errors){const previous=_resultsByPath.get(fullPath);_resultsByPath.set(fullPath,{depHash:depHash,errors:errors});const changed=!previous||JSON.stringify(previous.errors)!==JSON.stringify(errors);changed&&CodeInspection.requestRun()}).catch(function(){}).finally(function(){_refreshing.delete(fullPath)}))}function _scanFileAsync(text,fullPath){const deferred=new $.Deferred;if(!PACKAGE_JSON_RE.test(fullPath))return deferred.resolve(),deferred.promise();try{JSON.parse(text)}catch(e){return deferred.resolve(),deferred.promise()}_refreshInBackground(text,fullPath);const cached=_resultsByPath.get(fullPath);return deferred.resolve(cached&&cached.errors.length?{errors:cached.errors}:void 0),deferred.promise()}function init(){CodeInspection.register("json",{name:Strings.NPM_VULN_PROVIDER_NAME,scanFileAsync:_scanFileAsync})}exports.init=init,exports._findDependencyRanges=_findDependencyRanges,exports._errorsForEntry=_errorsForEntry,exports._severityToType=_severityToType});