-
Notifications
You must be signed in to change notification settings - Fork 4
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Update search tests and lintings #40
Changes from all commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -23,17 +23,16 @@ const config = new Conf(); | |
* Lists plugins & themes with the keyword 'dext-plugin' or 'dext-theme' on npm | ||
* | ||
* @param {String} plugin - The name of the plugin/theme | ||
* @return {Promise} - Resolves the search results as an array | ||
* @return {Promise} - Resolves the search results | ||
*/ | ||
const search = (searchTerm) => new Promise((resolve, reject) => { | ||
searchPackages(searchTerm).then(packages => { | ||
if(Array.isArray(packages)) { | ||
// Loop over all found packages to return a list | ||
const results = packages.map(pkg => pkg.name[0]); | ||
resolve(results); | ||
} else { | ||
const search = searchTerm => new Promise((resolve, reject) => { | ||
searchPackages(searchTerm).then((packages) => { | ||
if (!Array.isArray(packages) || !packages.length) { | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. If no packages are found for the search it will result in a reject (and an error in the cli) (because of !packages.length) and maybe you just want to reject if the search actually fails. |
||
reject(ERR_MODULE_SEARCH_FAILED); | ||
return; | ||
} | ||
|
||
resolve(packages); | ||
}); | ||
}); | ||
|
||
|
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -7,5 +7,5 @@ module.exports = { | |
conf, | ||
download, | ||
paths, | ||
search | ||
search, | ||
}; |
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -1,29 +1,46 @@ | ||
const http = require('http'); | ||
|
||
const getSearchUrl = pkg => `http://npmsearch.com/query\?q\=${pkg}%20AND%20\(keywords:dext-theme%20OR%20keywords:dext-plugin\)\&fields\=name`; | ||
/** | ||
* Retrieves the API url | ||
* | ||
* @param {String} q - The keyword to search | ||
* @return {String} | ||
*/ | ||
const getSearchUrl = q => `https://npmsearch.com/query?q=${q}%20AND%20(keywords:dext-theme%20OR%20keywords:dext-plugin)&fields=name,description`; | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. This doesn't work on my machine for some reason... Error: Protocol "https:" not supported. Expected "http:"
at new ClientRequest (_http_client.js:55:11)
at Object.exports.request (http.js:31:10)
at Object.exports.get (http.js:35:21)
at Promise (/Users/wolfwood/dev/dext-cli/node_modules/dext-core-utils/src/utils/search.js:23:15)
at searchPackages (/Users/wolfwood/dev/dext-cli/node_modules/dext-core-utils/src/utils/search.js:19:29)
at Promise (/Users/wolfwood/dev/dext-cli/node_modules/dext-core-utils/src/api/index.js:29:3)
at Object.search (/Users/wolfwood/dev/dext-cli/node_modules/dext-core-utils/src/api/index.js:28:30)
at Args.args.command (/Users/wolfwood/dev/dext-cli/cli.js:12:14)
at Args.runCommand (/Users/wolfwood/dev/dext-cli/node_modules/args/dist/index.js:327:37)
at Args.parse (/Users/wolfwood/dev/dext-cli/node_modules/args/dist/index.js:429:12) There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Ah! This is my fault. I've updated the endpoint to the secure protocol. We'll just need to require the |
||
|
||
/** | ||
* Searches for package marked with the keywords 'dext-plugin' or 'dext-theme' | ||
* Searches for packages marked with the keywords 'dext-plugin' or 'dext-theme' | ||
* | ||
* { name, desc } | ||
* | ||
* @param {String} pkg - The name of the npm package | ||
* @return {Promise} - The search results | ||
* @param {String} q - A keyword to search for (queried by package name) | ||
* @return {Promise} - Resolves an array of the package names and descriptions | ||
*/ | ||
const searchPackages = (pkg) => new Promise((resolve) => { | ||
const searchPackages = q => new Promise((resolve) => { | ||
let body = ''; | ||
const endpoint = getSearchUrl(q); | ||
// Retrieve the search results | ||
return http.get(getSearchUrl(pkg), (res) => { | ||
return http.get(endpoint, (res) => { | ||
res.on('data', (chunk) => { | ||
body += chunk; | ||
}); | ||
res.on('end', () => { | ||
const results = JSON.parse(body); | ||
if (!results.results) { | ||
resolve([]); | ||
return; | ||
} | ||
const resultsFlat = results.results.map(c => ({ | ||
name: c.name[0], | ||
desc: c.description ? c.description[0] : '', | ||
})); | ||
// Return the results part of the HTTP response | ||
resolve(results.results); | ||
resolve(resultsFlat); | ||
}); | ||
}); | ||
}); | ||
|
||
module.exports = { | ||
getSearchUrl, | ||
searchPackages | ||
searchPackages, | ||
}; |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This one still need to be added to 'errors/index.js'
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Woops, looks like I left that out as well! Will get to this piece tonight otherwise feel free to send a quick PR. 👍