| 'use strict'; |
| |
| var Path = require('path'); |
| var slice = Array.prototype.slice; |
| |
| function join(/* globs */) { |
| var args; |
| |
| args = slice.call(arguments, 0); |
| return args.reduce(function (result, globs) { |
| return _apply(result, function (path) { |
| return _apply(globs, function (glob) { |
| return _join(path, glob); |
| }); |
| }); |
| }, ''); |
| } |
| |
| function _apply(values, fn) { |
| if (Array.isArray(values)) { |
| return values.reduce(function (result, value) { |
| return result.concat(fn(value)); |
| }, []); |
| } |
| return fn(values); |
| } |
| |
| function _join(path, glob) { |
| var negative, positive; |
| |
| if (glob[0] === '!') { |
| positive = glob.substr(1); |
| if (path[0] === '!') { |
| negative = ''; |
| } else { |
| negative = '!'; |
| } |
| return negative + Path.join(path, positive); |
| } |
| return Path.join(path, glob); |
| } |
| |
| module.exports = join; |