-
Notifications
You must be signed in to change notification settings - Fork 8
/
Copy pathfuzzaldrin.coffee
42 lines (32 loc) · 1.11 KB
/
fuzzaldrin.coffee
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
binding = require('node-gyp-build')(__dirname);
defaultPathSeparator = if process?.platform is "win32" then '\\' else '/'
parseOptions = (options) ->
options.allowErrors ?= false
options.usePathScoring ?= true
options.useExtensionBonus ?= false
options.pathSeparator ?= defaultPathSeparator
options.optCharRegEx ?= null
options.wrap ?= null
options.maxResults ?= 0
return options
class FuzzaldrinPlusFast
constructor: ->
@obj = new binding.Fuzzaldrin()
setCandidates: (candidates, options = {}) ->
if options.key?
candidates = candidates.map(item => item[options.key])
@obj.setCandidates(candidates)
filter: (query, options = {}) ->
options = parseOptions(options)
@obj.filter query, options.maxResults,
options.usePathScoring, options.useExtensionBonus
module.exports =
New: ->
new FuzzaldrinPlusFast()
filter: (candidates, query, options = {}) ->
obj = new FuzzaldrinPlusFast()
obj.setCandidates(candidates, options)
obj.filter(query, options)
score: (candidate, query, options = {}) ->
binding.score candidate, query, options
prepareQuery: ->