12345678910111213141516171819202122232425262728293031323334353637383940414243 |
- '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;
|