Skip to content

Commit

Permalink
feat(search): fuzzy package search
Browse files Browse the repository at this point in the history
  • Loading branch information
jkuri committed Jun 6, 2017
1 parent 0f02fcb commit e21215b
Show file tree
Hide file tree
Showing 4 changed files with 27 additions and 6 deletions.
12 changes: 12 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 2 additions & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,7 @@
"@types/d3": "^4.9.0",
"@types/express": "^4.0.35",
"@types/fs-extra": "^3.0.3",
"@types/fuse": "^2.5.1",
"@types/glob": "^5.0.30",
"@types/jasmine": "^2.5.51",
"@types/jsonwebtoken": "^7.2.0",
Expand Down Expand Up @@ -100,6 +101,7 @@
"extract-text-webpack-plugin": "^2.1.0",
"file-loader": "^0.11.1",
"fs-extra": "^3.0.1",
"fuse.js": "^3.0.4",
"glob": "^7.1.2",
"html-webpack-plugin": "^2.28.0",
"jasmine": "^2.6.0",
Expand Down
2 changes: 1 addition & 1 deletion src/api/router.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ router.get('/user/login', index);
router.get('/package/:package(*)', index);

router.get('/api/package/get-random', web.getRandomPackages);
router.get('/api/package/search+*', web.searchPackages);
router.get('/api/package/:package(*)', web.getPackage);
router.get('/api/package/search', web.searchPackages);
router.post('/api/user/login', web.login);
router.post('/api/user/organizations', web.getUserOrganizations);
router.get('/user/login', index);
Expand Down
17 changes: 12 additions & 5 deletions src/api/web.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { storage, getRandomPackage } from './storage';
import { getRandomInt, getConfig, getAuth, getAuthPath } from './utils';
import * as auth from './auth';
import { writeJsonFile } from './fs';
import * as fuse from 'fuse.js';

export function getRandomPackages(req: express.Request, res: express.Response): express.Response {
let set = new Set();
Expand All @@ -29,11 +30,17 @@ export function getPackage(req: express.Request, res: express.Response): express
}

export function searchPackages(req: express.Request, res: express.Response): express.Response {
let pkgs = storage
.map(pkg => pkg && pkg.name.indexOf(req.query.keyword) !== -1 ? pkg : null)
.filter(Boolean);

return res.status(200).json(pkgs);
let word = req.query.keyword;
let search = new fuse(storage, {
shouldSort: true,
threshold: 0.6,
location: 0,
distance: 100,
maxPatternLength: 32,
keys: ['name', 'description', 'version', 'readme']
});

return res.status(200).json(search.search(word));
}


Expand Down

0 comments on commit e21215b

Please sign in to comment.