-
Notifications
You must be signed in to change notification settings - Fork 3
Expand file tree
/
Copy pathindex.js
More file actions
52 lines (44 loc) · 1.26 KB
/
index.js
File metadata and controls
52 lines (44 loc) · 1.26 KB
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
43
44
45
46
47
48
49
50
51
var pfs = require('pull-fs')
var pull = require('pull-stream')
var path = require('path')
var glob = module.exports = function (x) {
var rest = path.normalize(x).split(path.sep)
var stream
var pipe = []
if(rest[0] == '...') {
pipe.push(pfs.ancestors())
rest.shift()
} else if(rest[0] === '~' || rest[0] === '') {
pipe.push(pull.values([rest.shift() ? process.env.HOME : '/']))
} else {
pipe.push(pull.values(['.']))
}
//this should be tidied up.
//need a more betterer glob parser
//that handles escapes...
rest.forEach(function (e) {
if('**' === e) {
pipe.push(pfs.starStar())
} else if(/[*?{}]/.test(e)) {
//literal
e = e
.split('.').join('\\.')
.split('?').join('.')
.split(/({.*?})/).map(function (e, i) {
if(i % 2)
return e.replace('{', '(?:')
.replace('}', ')')
.split(',').join('|')
return e
}).join('')
var x = new RegExp('^'+e.split('*').join('.*')+'$')
pipe.push(pfs.star(x))
} else if(e === '')
//will only happen in the last position
//if you do */
pipe.push(pfs.isDirectory())
else
pipe.push(pull(pfs.resolve(e), pfs.exists()))
})
return pull.apply(null, pipe)
}