diff --git a/README.md b/README.md index 044ed3b..afe876f 100644 --- a/README.md +++ b/README.md @@ -70,6 +70,9 @@ Options: -f, --find The keyword you want to search for. Example: es6 + -o, --org (optional) + GitHub organisation name. Example: GitHub + -l, --limit Limit the search results to the specified number. Default is 10 @@ -83,7 +86,6 @@ Options: Outputs stack trace in case an exception is thrown ``` - ### Non-verbose output ```sh diff --git a/package-lock.json b/package-lock.json index cce78de..7db42ab 100644 --- a/package-lock.json +++ b/package-lock.json @@ -9,7 +9,7 @@ "version": "0.1.12", "license": "ISC", "dependencies": { - "@vercel/ncc": "^0.28.4", + "@vercel/ncc": "^0.38.0", "arg": "^4.1.3", "axios": "^0.21.1", "cachedir": "^2.3.0", @@ -35,9 +35,9 @@ "dev": true }, "node_modules/@vercel/ncc": { - "version": "0.28.4", - "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.28.4.tgz", - "integrity": "sha512-vQe8WuBMiBgJbRM9TXMSb2zXmaoplH84K91nd2CmIlrXH0F3RjyiO9kdvaZbKbAQ66Mh/hMF2JPtDzbVvsx+Eg==", + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.0.tgz", + "integrity": "sha512-B4YKZMm/EqMptKSFyAq4q2SlgJe+VCmEH6Y8gf/E1pTlWbsUJpuH1ymik2Ex3aYO5mCWwV1kaSYHSQOT8+4vHA==", "bin": { "ncc": "dist/ncc/cli.js" } @@ -1148,9 +1148,9 @@ "dev": true }, "@vercel/ncc": { - "version": "0.28.4", - "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.28.4.tgz", - "integrity": "sha512-vQe8WuBMiBgJbRM9TXMSb2zXmaoplH84K91nd2CmIlrXH0F3RjyiO9kdvaZbKbAQ66Mh/hMF2JPtDzbVvsx+Eg==" + "version": "0.38.0", + "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.0.tgz", + "integrity": "sha512-B4YKZMm/EqMptKSFyAq4q2SlgJe+VCmEH6Y8gf/E1pTlWbsUJpuH1ymik2Ex3aYO5mCWwV1kaSYHSQOT8+4vHA==" }, "ansi-colors": { "version": "4.1.1", diff --git a/package.json b/package.json index 75d46de..7eaa985 100644 --- a/package.json +++ b/package.json @@ -5,7 +5,8 @@ "main": "src/cli.js", "scripts": { "test": "mocha", - "build": "ncc build src/cli.js -o bin && mv bin/index.js bin/starred_search" + "build": "ncc build src/cli.js -o bin && mv bin/index.js bin/starred_search", + "all": "npm test && npm run build" }, "bin": { "@link-/starred_search": "bin/starred_search", @@ -32,7 +33,7 @@ "author": "Link-", "license": "ISC", "dependencies": { - "@vercel/ncc": "^0.28.4", + "@vercel/ncc": "^0.38.0", "arg": "^4.1.3", "axios": "^0.21.1", "cachedir": "^2.3.0", diff --git a/src/cli.js b/src/cli.js index 16a0b87..2447303 100644 --- a/src/cli.js +++ b/src/cli.js @@ -22,6 +22,9 @@ Options: -f, --find The keyword you want to search for. Example: es6 + + -o, --org (optional) + GitHub organisation name. Example: GitHub -l, --limit Limit the search results to the specified number. Default is 10 @@ -44,6 +47,7 @@ const parseArgs = (rawArgs) => { '--help': Boolean, '--user': String, '--find': String, + '--org': String, '--cache-dir': String, '--limit': Number, '--verbose': Boolean, @@ -53,6 +57,7 @@ const parseArgs = (rawArgs) => { '-h': '--help', '-u': '--user', '-f': '--find', + '-o': '--org', '-c': '--cache-dir', '-l': '--limit', '-V': '--verbose', @@ -64,6 +69,7 @@ const parseArgs = (rawArgs) => { help: args['--help'], user: args['--user'], findParam: args['--find'], + organization: args['--org'], cacheDir: args['--cache-dir'] || cachedir('starredsearch'), limit: args['--limit'] || 10, verbose: args['--verbose'] || false, diff --git a/src/main.js b/src/main.js index fb6297f..2923ffe 100644 --- a/src/main.js +++ b/src/main.js @@ -129,7 +129,12 @@ const fetch_starred_repos = (options, pages) => { * @param {*} options */ const search = (options) => { - (options.verbose) ? console.log(chalk.bold.green(`🕵 INFO: Searching for "${options.findParam}" in "${options.user}"'s starred catalogue`)) : null; + let organizationLog = ''; + if (options.verbose) { + organizationLog = options.organization ? `(belonging to org: ${options.organization})` : ''; + console.log(chalk.bold.green(`🕵 INFO: Searching for "${options.findParam}" ${organizationLog} in "${options.user}"'s starred catalogue`)) + } + validate_parameters(options); return calculate_pages(options) @@ -162,11 +167,21 @@ const search = (options) => { * then we do a full-text search only in the 'full_name, * description and homepage' fields. */ + let flattenedData = data.flat(); + + // if the organization option was passed, run the search on the repos + // belonging to that organization only + if (options.organization) { + flattenedData = flattenedData.filter(repo => + repo.owner.type == "Organization" && repo.owner.login.toLowerCase() == options.organization.toLowerCase() + ); + } + const searcher = new MiniSearch({ fields: ['full_name', 'description', 'homepage'], storeFields: ['full_name', 'description', 'homepage', 'forks', 'stargazers_count'] }); - searcher.addAll(data.flat()); + searcher.addAll(flattenedData); let results = searcher.search(options.findParam); // Limit the search results results.splice(options.limit);