_getApplication(name, version) { const appVersions = this.applications.get(name); if (!appVersions) return null; if (!version) return appVersions.get('latest'); // when version is not a range simply return matched if (semver.valid(version)) return appVersions.get(version); // search matching version, first matched will be the latest try { const range = new semver.Range(version); const versions = this._cachedVersions.get(name); for (let i = 0; i < versions.length; i++) { // version === [versionCode, app] const version = versions[i]; if (range.test(version[0])) return version[1]; } } catch (error) { // ignored } return null; }