search search-box search-results(results="{results}") script. const Promise = require("bluebird"); const path = require("path"); const dotty = require("dotty"); const {ipcRenderer} = require("electron"); const rfr = require("rfr"); const appDirectory = require("appdirectory"); let appDirectories = new appDirectory("npmbar"); const jsonDB = rfr("lib/db/json-db-sqlite"); const jsonDBCache = rfr("lib/db/json-db-cache"); this.mixin(require("riot-query").mixin); Object.assign(this, { results: [] }); let lastQuery; this.on("updated", () => { global.triggerWindowResize(); }); this.on("mount", () => { Promise.try(() => { return Promise.all([ jsonDB(path.join(appDirectories.userData(), "search-cache.db")), jsonDB(path.join(appDirectories.userData(), "package-cache.db")) ]); }).spread((searchCacheDB, packageCacheDB) => { return Promise.all([ jsonDBCache(searchCacheDB, "searchCache"), jsonDBCache(packageCacheDB, "packageCache") ]); }).spread((searchCache, packageCache) => { const search = rfr("lib/search/constructor-io")("CD06z4gVeqSXRiDL2ZNK", searchCache); const lookupPackage = rfr("lib/package/fetch-metadata")(packageCache); let searchBox = this.queryOne("search-box"); let searchResults = this.queryOne("search-results"); searchBox.on("selectionUp", () => { searchResults.moveSelectionUp(); }); searchBox.on("selectionDown", () => { searchResults.moveSelectionDown(); }); searchBox.on("queryChanged", (query) => { Promise.try(() => { lastQuery = query; return search(query); }).then((results) => { /* Sometimes, search results may come back out of order. Here we check whether * the lastQuery is still the same as when we initially made the request. */ if (lastQuery === query) { this.results = results.packages; this.update(); this.results.forEach((result, i) => { Promise.try(() => { return lookupPackage(result.name); }).then((metadata) => { if (dotty.exists(metadata, "dist-tags.latest")) { let latestVersion = metadata["dist-tags"].latest; let latestMetadata = metadata.versions[latestVersion] result.latestVersion = latestVersion; if (latestMetadata != null) { result.deprecated = latestMetadata.deprecated; } if (latestVersion === "0.0.1-security") { result.reserved = "This formerly popular package was removed, and its name has been reserved." } this.update(); } }) }); } }); }); searchBox.on("cancel", () => { ipcRenderer.send("closeSearch"); }) }); });