var fd = this var wildstar = use('wildstar') function last_pos(str, sep) { var last = null replace(str, sep, function(m, pos) { last = pos return m }) return last } // Helper to join paths function join_paths(base, rel) { base = replace(base, /\/+$/, "") rel = replace(rel, /^\/+/, "") if (!base) return rel if (!rel) return base return base + "/" + rel } fd.join_paths = join_paths fd.basename = function basename(path) { var last = last_pos(path, '/') if (last == null) return path return text(path, last+1) } fd.dirname = function dirname(path) { var last = last_pos(path, '/') if (last == null) return "" return text(path,0,last) } fd.stem = function stem(path) { var last = last_pos(path, '.') if (last == null) return path return text(path,0,last) } fd.globfs = function(globs, dir) { if (dir == null) dir = "." var results = [] function check_neg(path) { var found = false; arrfor(globs, function(g) { if (starts_with(g, "!") && wildstar.match(text(g, 1), path, wildstar.WM_WILDSTAR)) { found = true; return true; } }, null, true); return found; } function check_pos(path) { var found = false; arrfor(globs, function(g) { if (!starts_with(g, "!") && wildstar.match(g, path, wildstar.WM_WILDSTAR)) { found = true; return true; } }, null, true); return found; } function visit(curr_full, rel_prefix) { if (rel_prefix && check_neg(rel_prefix)) return var list = fd.readdir(curr_full) if (!list) return arrfor(list, function(item) { var item_rel = rel_prefix ? rel_prefix + "/" + item : item var child_full = join_paths(curr_full, item) var st = fd.stat(child_full) if (st.isDirectory) { if (!check_neg(item_rel)) { visit(child_full, item_rel) } } else { if (!check_neg(item_rel) && check_pos(item_rel)) { push(results, item_rel) } } }); } var st = fd.stat(dir) if (st && st.isDirectory) { visit(dir, "") } return results } return fd