3 var Path = require('path');
4 var slice = Array.prototype.slice;
6 function join(/* globs */) {
9 args = slice.call(arguments, 0);
10 return args.reduce(function (result, globs) {
11 return _apply(result, function (path) {
12 return _apply(globs, function (glob) {
13 return _join(path, glob);
19 function _apply(values, fn) {
20 if (Array.isArray(values)) {
21 return values.reduce(function (result, value) {
22 return result.concat(fn(value));
28 function _join(path, glob) {
29 var negative, positive;
31 if (glob[0] === '!') {
32 positive = glob.substr(1);
33 if (path[0] === '!') {
38 return negative + Path.join(path, positive);
40 return Path.join(path, glob);
43 module.exports = join;