You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

97 lines
2.8 KiB
Plaintext

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");
})
});
});