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