var fd = this var wildstar = use('wildstar') // Helper to join paths function join_paths(base, rel) { base = base.replace(/\/+$/, "") rel = rel.replace(/^\/+/, "") if (!base) return rel if (!rel) return base return base + "/" + rel } fd.globfs = function(globs, dir) { if (dir == null) dir = "." var results = [] function check_neg(path) { for (var g of globs) { if (g.startsWith("!") && wildstar.match(g.substring(1), path, wildstar.WM_WILDSTAR)) return true; } return false; } function check_pos(path) { for (var g of globs) { if (!g.startsWith("!") && wildstar.match(g, path, wildstar.WM_WILDSTAR)) return true; } return false; } function visit(curr_full, rel_prefix) { if (rel_prefix && check_neg(rel_prefix)) return var list = fd.readdir(curr_full) if (!list) return for (var item of list) { 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)) { results.push(item_rel) } } } } var st = fd.stat(dir) if (st && st.isDirectory) { visit(dir, "") } return results } return fd