aboutsummaryrefslogtreecommitdiff
path: root/node_modules/gulp-sym
diff options
context:
space:
mode:
authorFlorian Dold <florian.dold@gmail.com>2017-05-03 15:35:00 +0200
committerFlorian Dold <florian.dold@gmail.com>2017-05-03 15:35:00 +0200
commitde98e0b232509d5f40c135d540a70e415272ff85 (patch)
treea79222a5b58484ab3b80d18efcaaa7ccc4769b33 /node_modules/gulp-sym
parente0c9d480a73fa629c1e4a47d3e721f1d2d345406 (diff)
downloadwallet-core-de98e0b232509d5f40c135d540a70e415272ff85.tar.xz
node_modules
Diffstat (limited to 'node_modules/gulp-sym')
-rw-r--r--node_modules/gulp-sym/node_modules/ansi-styles/index.js40
-rw-r--r--node_modules/gulp-sym/node_modules/ansi-styles/package.json46
-rw-r--r--node_modules/gulp-sym/node_modules/ansi-styles/readme.md70
-rw-r--r--node_modules/gulp-sym/node_modules/chalk/index.js95
l---------node_modules/gulp-sym/node_modules/chalk/node_modules/.bin/has-ansi1
l---------node_modules/gulp-sym/node_modules/chalk/node_modules/.bin/strip-ansi1
l---------node_modules/gulp-sym/node_modules/chalk/node_modules/.bin/supports-color1
-rw-r--r--node_modules/gulp-sym/node_modules/chalk/package.json53
-rw-r--r--node_modules/gulp-sym/node_modules/chalk/readme.md175
-rw-r--r--node_modules/gulp-sym/node_modules/dateformat/.npmignore57
-rw-r--r--node_modules/gulp-sym/node_modules/dateformat/.travis.yml4
-rw-r--r--node_modules/gulp-sym/node_modules/dateformat/LICENSE20
-rw-r--r--node_modules/gulp-sym/node_modules/dateformat/Readme.md82
-rwxr-xr-xnode_modules/gulp-sym/node_modules/dateformat/bin/cli.js75
-rw-r--r--node_modules/gulp-sym/node_modules/dateformat/lib/dateformat.js226
-rw-r--r--node_modules/gulp-sym/node_modules/dateformat/package.json36
-rw-r--r--node_modules/gulp-sym/node_modules/dateformat/test/test_dayofweek.js15
-rw-r--r--node_modules/gulp-sym/node_modules/dateformat/test/test_formats.js76
-rw-r--r--node_modules/gulp-sym/node_modules/dateformat/test/test_isoutcdatetime.js11
-rw-r--r--node_modules/gulp-sym/node_modules/dateformat/test/weekofyear/test_weekofyear.js4
-rw-r--r--node_modules/gulp-sym/node_modules/dateformat/test/weekofyear/test_weekofyear.sh27
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/.npmignore7
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/.travis.yml5
-rwxr-xr-xnode_modules/gulp-sym/node_modules/gulp-util/LICENSE20
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/README.md140
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/index.js18
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/File.js1
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/PluginError.js64
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/beep.js3
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/buffer.js15
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/colors.js1
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/combine.js11
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/date.js1
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/env.js4
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/isBuffer.js7
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/isNull.js3
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/isStream.js5
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/linefeed.js1
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/log.js10
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/noop.js5
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/replaceExtension.js9
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/lib/template.js19
l---------node_modules/gulp-sym/node_modules/gulp-util/node_modules/.bin/dateformat1
-rw-r--r--node_modules/gulp-sym/node_modules/gulp-util/package.json44
-rwxr-xr-xnode_modules/gulp-sym/node_modules/has-ansi/cli.js53
-rw-r--r--node_modules/gulp-sym/node_modules/has-ansi/index.js4
-rw-r--r--node_modules/gulp-sym/node_modules/has-ansi/package.json57
-rw-r--r--node_modules/gulp-sym/node_modules/has-ansi/readme.md45
-rw-r--r--node_modules/gulp-sym/node_modules/lodash.template/LICENSE.txt22
-rw-r--r--node_modules/gulp-sym/node_modules/lodash.template/README.md15
-rw-r--r--node_modules/gulp-sym/node_modules/lodash.template/index.js216
-rw-r--r--node_modules/gulp-sym/node_modules/lodash.template/package.json26
-rw-r--r--node_modules/gulp-sym/node_modules/lodash.templatesettings/LICENSE.txt22
-rw-r--r--node_modules/gulp-sym/node_modules/lodash.templatesettings/README.md15
-rw-r--r--node_modules/gulp-sym/node_modules/lodash.templatesettings/index.js73
-rw-r--r--node_modules/gulp-sym/node_modules/lodash.templatesettings/package.json21
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/.travis.yml4
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/LICENSE18
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/example/parse.js2
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/index.js200
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/package.json40
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/readme.markdown86
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/test/all_bool.js32
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/test/bool.js119
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/test/dash.js31
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/test/default_bool.js20
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/test/dotted.js22
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/test/long.js31
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/test/num.js36
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/test/parse.js197
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/test/parse_modified.js9
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/test/short.js67
-rw-r--r--node_modules/gulp-sym/node_modules/minimist/test/whitespace.js8
-rwxr-xr-xnode_modules/gulp-sym/node_modules/strip-ansi/cli.js39
-rw-r--r--node_modules/gulp-sym/node_modules/strip-ansi/index.js6
-rw-r--r--node_modules/gulp-sym/node_modules/strip-ansi/package.json56
-rw-r--r--node_modules/gulp-sym/node_modules/strip-ansi/readme.md43
-rwxr-xr-xnode_modules/gulp-sym/node_modules/supports-color/cli.js28
-rw-r--r--node_modules/gulp-sym/node_modules/supports-color/index.js32
-rw-r--r--node_modules/gulp-sym/node_modules/supports-color/package.json50
-rw-r--r--node_modules/gulp-sym/node_modules/supports-color/readme.md44
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/.npmignore6
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/.travis.yml6
-rwxr-xr-xnode_modules/gulp-sym/node_modules/vinyl/LICENSE20
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/README.md123
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/index.js128
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/lib/cloneBuffer.js7
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/lib/inspectStream.js12
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/lib/isBuffer.js7
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/lib/isNull.js3
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/lib/isStream.js5
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/package.json37
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/test/File.js540
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/test/cloneBuffer.js28
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/test/inspectStream.js53
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/test/isBuffer.js29
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/test/isNull.js23
-rw-r--r--node_modules/gulp-sym/node_modules/vinyl/test/isStream.js29
98 files changed, 4354 insertions, 0 deletions
diff --git a/node_modules/gulp-sym/node_modules/ansi-styles/index.js b/node_modules/gulp-sym/node_modules/ansi-styles/index.js
new file mode 100644
index 000000000..2d8b4726d
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/ansi-styles/index.js
@@ -0,0 +1,40 @@
+'use strict';
+var styles = module.exports;
+
+var codes = {
+ reset: [0, 0],
+
+ bold: [1, 22], // 21 isn't widely supported and 22 does the same thing
+ dim: [2, 22],
+ italic: [3, 23],
+ underline: [4, 24],
+ inverse: [7, 27],
+ hidden: [8, 28],
+ strikethrough: [9, 29],
+
+ black: [30, 39],
+ red: [31, 39],
+ green: [32, 39],
+ yellow: [33, 39],
+ blue: [34, 39],
+ magenta: [35, 39],
+ cyan: [36, 39],
+ white: [37, 39],
+ gray: [90, 39],
+
+ bgBlack: [40, 49],
+ bgRed: [41, 49],
+ bgGreen: [42, 49],
+ bgYellow: [43, 49],
+ bgBlue: [44, 49],
+ bgMagenta: [45, 49],
+ bgCyan: [46, 49],
+ bgWhite: [47, 49]
+};
+
+Object.keys(codes).forEach(function (key) {
+ var val = codes[key];
+ var style = styles[key] = {};
+ style.open = '\u001b[' + val[0] + 'm';
+ style.close = '\u001b[' + val[1] + 'm';
+});
diff --git a/node_modules/gulp-sym/node_modules/ansi-styles/package.json b/node_modules/gulp-sym/node_modules/ansi-styles/package.json
new file mode 100644
index 000000000..a9ba60766
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/ansi-styles/package.json
@@ -0,0 +1,46 @@
+{
+ "name": "ansi-styles",
+ "version": "1.1.0",
+ "description": "ANSI escape codes for styling strings in the terminal",
+ "license": "MIT",
+ "repository": "sindresorhus/ansi-styles",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "http://sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "log",
+ "logging",
+ "command-line",
+ "text"
+ ],
+ "devDependencies": {
+ "mocha": "*"
+ }
+}
diff --git a/node_modules/gulp-sym/node_modules/ansi-styles/readme.md b/node_modules/gulp-sym/node_modules/ansi-styles/readme.md
new file mode 100644
index 000000000..73584cc95
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/ansi-styles/readme.md
@@ -0,0 +1,70 @@
+# ansi-styles [![Build Status](https://travis-ci.org/sindresorhus/ansi-styles.svg?branch=master)](https://travis-ci.org/sindresorhus/ansi-styles)
+
+> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for styling strings in the terminal
+
+You probably want the higher-level [chalk](https://github.com/sindresorhus/chalk) module for styling your strings.
+
+![screenshot](screenshot.png)
+
+
+## Install
+
+```sh
+$ npm install --save ansi-styles
+```
+
+
+## Usage
+
+```js
+var ansi = require('ansi-styles');
+
+console.log(ansi.green.open + 'Hello world!' + ansi.green.close);
+```
+
+
+## API
+
+Each style has an `open` and `close` property.
+
+
+## Styles
+
+### General
+
+- `reset`
+- `bold`
+- `dim`
+- `italic` *(not widely supported)*
+- `underline`
+- `inverse`
+- `hidden`
+- `strikethrough` *(not widely supported)*
+
+### Text colors
+
+- `black`
+- `red`
+- `green`
+- `yellow`
+- `blue`
+- `magenta`
+- `cyan`
+- `white`
+- `gray`
+
+### Background colors
+
+- `bgBlack`
+- `bgRed`
+- `bgGreen`
+- `bgYellow`
+- `bgBlue`
+- `bgMagenta`
+- `bgCyan`
+- `bgWhite`
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/gulp-sym/node_modules/chalk/index.js b/node_modules/gulp-sym/node_modules/chalk/index.js
new file mode 100644
index 000000000..ac1f16820
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/chalk/index.js
@@ -0,0 +1,95 @@
+'use strict';
+var escapeStringRegexp = require('escape-string-regexp');
+var ansiStyles = require('ansi-styles');
+var stripAnsi = require('strip-ansi');
+var hasAnsi = require('has-ansi');
+var supportsColor = require('supports-color');
+var defineProps = Object.defineProperties;
+var chalk = module.exports;
+
+function build(_styles) {
+ var builder = function builder() {
+ return applyStyle.apply(builder, arguments);
+ };
+ builder._styles = _styles;
+ // __proto__ is used because we must return a function, but there is
+ // no way to create a function with a different prototype.
+ builder.__proto__ = proto;
+ return builder;
+}
+
+var styles = (function () {
+ var ret = {};
+
+ ansiStyles.grey = ansiStyles.gray;
+
+ Object.keys(ansiStyles).forEach(function (key) {
+ ansiStyles[key].closeRe = new RegExp(escapeStringRegexp(ansiStyles[key].close), 'g');
+
+ ret[key] = {
+ get: function () {
+ return build(this._styles.concat(key));
+ }
+ };
+ });
+
+ return ret;
+})();
+
+var proto = defineProps(function chalk() {}, styles);
+
+function applyStyle() {
+ // support varags, but simply cast to string in case there's only one arg
+ var args = arguments;
+ var argsLen = args.length;
+ var str = argsLen !== 0 && String(arguments[0]);
+ if (argsLen > 1) {
+ // don't slice `arguments`, it prevents v8 optimizations
+ for (var a = 1; a < argsLen; a++) {
+ str += ' ' + args[a];
+ }
+ }
+
+ if (!chalk.enabled || !str) {
+ return str;
+ }
+
+ /*jshint validthis: true*/
+ var nestedStyles = this._styles;
+
+ for (var i = 0; i < nestedStyles.length; i++) {
+ var code = ansiStyles[nestedStyles[i]];
+ // Replace any instances already present with a re-opening code
+ // otherwise only the part of the string until said closing code
+ // will be colored, and the rest will simply be 'plain'.
+ str = code.open + str.replace(code.closeRe, code.open) + code.close;
+ }
+
+ return str;
+}
+
+function init() {
+ var ret = {};
+
+ Object.keys(styles).forEach(function (name) {
+ ret[name] = {
+ get: function () {
+ return build([name]);
+ }
+ };
+ });
+
+ return ret;
+}
+
+defineProps(chalk, init());
+
+chalk.styles = ansiStyles;
+chalk.hasColor = hasAnsi;
+chalk.stripColor = stripAnsi;
+chalk.supportsColor = supportsColor;
+
+// detect mode if not set manually
+if (chalk.enabled === undefined) {
+ chalk.enabled = chalk.supportsColor;
+}
diff --git a/node_modules/gulp-sym/node_modules/chalk/node_modules/.bin/has-ansi b/node_modules/gulp-sym/node_modules/chalk/node_modules/.bin/has-ansi
new file mode 120000
index 000000000..957e9f8cf
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/chalk/node_modules/.bin/has-ansi
@@ -0,0 +1 @@
+../../../has-ansi/cli.js \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/chalk/node_modules/.bin/strip-ansi b/node_modules/gulp-sym/node_modules/chalk/node_modules/.bin/strip-ansi
new file mode 120000
index 000000000..f7646606c
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/chalk/node_modules/.bin/strip-ansi
@@ -0,0 +1 @@
+../../../strip-ansi/cli.js \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/chalk/node_modules/.bin/supports-color b/node_modules/gulp-sym/node_modules/chalk/node_modules/.bin/supports-color
new file mode 120000
index 000000000..886732fac
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/chalk/node_modules/.bin/supports-color
@@ -0,0 +1 @@
+../../../supports-color/cli.js \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/chalk/package.json b/node_modules/gulp-sym/node_modules/chalk/package.json
new file mode 100644
index 000000000..e58fe486a
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/chalk/package.json
@@ -0,0 +1,53 @@
+{
+ "name": "chalk",
+ "version": "0.5.1",
+ "description": "Terminal string styling done right. Created because the `colors` module does some really horrible things.",
+ "license": "MIT",
+ "repository": "sindresorhus/chalk",
+ "maintainers": [
+ "Sindre Sorhus <sindresorhus@gmail.com> (http://sindresorhus.com)",
+ "Joshua Appelman <joshua@jbna.nl>"
+ ],
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha",
+ "bench": "matcha benchmark.js"
+ },
+ "files": [
+ "index.js"
+ ],
+ "keywords": [
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "ansi",
+ "styles",
+ "tty",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "log",
+ "logging",
+ "command-line",
+ "text"
+ ],
+ "dependencies": {
+ "ansi-styles": "^1.1.0",
+ "escape-string-regexp": "^1.0.0",
+ "has-ansi": "^0.1.0",
+ "strip-ansi": "^0.3.0",
+ "supports-color": "^0.2.0"
+ },
+ "devDependencies": {
+ "matcha": "^0.5.0",
+ "mocha": "*"
+ }
+}
diff --git a/node_modules/gulp-sym/node_modules/chalk/readme.md b/node_modules/gulp-sym/node_modules/chalk/readme.md
new file mode 100644
index 000000000..239c791f8
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/chalk/readme.md
@@ -0,0 +1,175 @@
+# <img width="300" src="https://cdn.rawgit.com/sindresorhus/chalk/77ae94f63ab1ac61389b190e5a59866569d1a376/logo.svg" alt="chalk">
+
+> Terminal string styling done right
+
+[![Build Status](https://travis-ci.org/sindresorhus/chalk.svg?branch=master)](https://travis-ci.org/sindresorhus/chalk)
+![](http://img.shields.io/badge/unicorn-approved-ff69b4.svg)
+
+[colors.js](https://github.com/Marak/colors.js) is currently the most popular string styling module, but it has serious deficiencies like extending String.prototype which causes all kinds of [problems](https://github.com/yeoman/yo/issues/68). Although there are other ones, they either do too much or not enough.
+
+**Chalk is a clean and focused alternative.**
+
+![screenshot](https://github.com/sindresorhus/ansi-styles/raw/master/screenshot.png)
+
+
+## Why
+
+- Highly performant
+- Doesn't extend String.prototype
+- Expressive API
+- Ability to nest styles
+- Clean and focused
+- Auto-detects color support
+- Actively maintained
+- [Used by 1000+ modules](https://npmjs.org/browse/depended/chalk)
+
+
+## Install
+
+```sh
+$ npm install --save chalk
+```
+
+
+## Usage
+
+Chalk comes with an easy to use composable API where you just chain and nest the styles you want.
+
+```js
+var chalk = require('chalk');
+
+// style a string
+console.log( chalk.blue('Hello world!') );
+
+// combine styled and normal strings
+console.log( chalk.blue('Hello'), 'World' + chalk.red('!') );
+
+// compose multiple styles using the chainable API
+console.log( chalk.blue.bgRed.bold('Hello world!') );
+
+// pass in multiple arguments
+console.log( chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz') );
+
+// nest styles
+console.log( chalk.red('Hello', chalk.underline.bgBlue('world') + '!') );
+
+// nest styles of the same type even (color, underline, background)
+console.log( chalk.green('I am a green line ' + chalk.blue('with a blue substring') + ' that becomes green again!') );
+```
+
+Easily define your own themes.
+
+```js
+var chalk = require('chalk');
+var error = chalk.bold.red;
+console.log(error('Error!'));
+```
+
+Take advantage of console.log [string substitution](http://nodejs.org/docs/latest/api/console.html#console_console_log_data).
+
+```js
+var name = 'Sindre';
+console.log(chalk.green('Hello %s'), name);
+//=> Hello Sindre
+```
+
+
+## API
+
+### chalk.`<style>[.<style>...](string, [string...])`
+
+Example: `chalk.red.bold.underline('Hello', 'world');`
+
+Chain [styles](#styles) and call the last one as a method with a string argument. Order doesn't matter.
+
+Multiple arguments will be separated by space.
+
+### chalk.enabled
+
+Color support is automatically detected, but you can override it.
+
+### chalk.supportsColor
+
+Detect whether the terminal [supports color](https://github.com/sindresorhus/supports-color).
+
+Can be overridden by the user with the flags `--color` and `--no-color`.
+
+Used internally and handled for you, but exposed for convenience.
+
+### chalk.styles
+
+Exposes the styles as [ANSI escape codes](https://github.com/sindresorhus/ansi-styles).
+
+Generally not useful, but you might need just the `.open` or `.close` escape code if you're mixing externally styled strings with yours.
+
+```js
+var chalk = require('chalk');
+
+console.log(chalk.styles.red);
+//=> {open: '\u001b[31m', close: '\u001b[39m'}
+
+console.log(chalk.styles.red.open + 'Hello' + chalk.styles.red.close);
+```
+
+### chalk.hasColor(string)
+
+Check whether a string [has color](https://github.com/sindresorhus/has-ansi).
+
+### chalk.stripColor(string)
+
+[Strip color](https://github.com/sindresorhus/strip-ansi) from a string.
+
+Can be useful in combination with `.supportsColor` to strip color on externally styled text when it's not supported.
+
+Example:
+
+```js
+var chalk = require('chalk');
+var styledString = getText();
+
+if (!chalk.supportsColor) {
+ styledString = chalk.stripColor(styledString);
+}
+```
+
+
+## Styles
+
+### General
+
+- `reset`
+- `bold`
+- `dim`
+- `italic` *(not widely supported)*
+- `underline`
+- `inverse`
+- `hidden`
+- `strikethrough` *(not widely supported)*
+
+### Text colors
+
+- `black`
+- `red`
+- `green`
+- `yellow`
+- `blue`
+- `magenta`
+- `cyan`
+- `white`
+- `gray`
+
+### Background colors
+
+- `bgBlack`
+- `bgRed`
+- `bgGreen`
+- `bgYellow`
+- `bgBlue`
+- `bgMagenta`
+- `bgCyan`
+- `bgWhite`
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/gulp-sym/node_modules/dateformat/.npmignore b/node_modules/gulp-sym/node_modules/dateformat/.npmignore
new file mode 100644
index 000000000..830d0ff74
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/dateformat/.npmignore
@@ -0,0 +1,57 @@
+# .gitignore <https://github.com/tunnckoCore/dotfiles>
+#
+# Copyright (c) 2014 Charlike Mike Reagent, contributors.
+# Released under the MIT license.
+#
+
+# Always-ignore dirs #
+# ####################
+_gh_pages
+node_modules
+bower_components
+components
+vendor
+build
+dest
+dist
+src
+lib-cov
+coverage
+nbproject
+cache
+temp
+tmp
+
+# Packages #
+# ##########
+*.7z
+*.dmg
+*.gz
+*.iso
+*.jar
+*.rar
+*.tar
+*.zip
+
+# OS, Logs and databases #
+# #########################
+*.pid
+*.dat
+*.log
+*.sql
+*.sqlite
+*~
+~*
+
+# Another files #
+# ###############
+Icon?
+.DS_Store*
+Thumbs.db
+ehthumbs.db
+Desktop.ini
+npm-debug.log
+.directory
+._*
+
+koa-better-body \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/dateformat/.travis.yml b/node_modules/gulp-sym/node_modules/dateformat/.travis.yml
new file mode 100644
index 000000000..18ae2d89c
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/dateformat/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - "0.11"
+ - "0.10"
diff --git a/node_modules/gulp-sym/node_modules/dateformat/LICENSE b/node_modules/gulp-sym/node_modules/dateformat/LICENSE
new file mode 100644
index 000000000..57d44e2ac
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/dateformat/LICENSE
@@ -0,0 +1,20 @@
+(c) 2007-2009 Steven Levithan <stevenlevithan.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/gulp-sym/node_modules/dateformat/Readme.md b/node_modules/gulp-sym/node_modules/dateformat/Readme.md
new file mode 100644
index 000000000..0aaf1e822
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/dateformat/Readme.md
@@ -0,0 +1,82 @@
+# dateformat
+
+A node.js package for Steven Levithan's excellent [dateFormat()][dateformat] function.
+
+[![Build Status](https://travis-ci.org/felixge/node-dateformat.svg)](https://travis-ci.org/felixge/node-dateformat)
+
+## Modifications
+
+* Removed the `Date.prototype.format` method. Sorry folks, but extending native prototypes is for suckers.
+* Added a `module.exports = dateFormat;` statement at the bottom
+* Added the placeholder `N` to get the ISO 8601 numeric representation of the day of the week
+
+## Installation
+
+```bash
+$ npm install dateformat
+$ dateformat --help
+```
+
+## Usage
+
+As taken from Steven's post, modified to match the Modifications listed above:
+```js
+ var dateFormat = require('dateformat');
+ var now = new Date();
+
+ // Basic usage
+ dateFormat(now, "dddd, mmmm dS, yyyy, h:MM:ss TT");
+ // Saturday, June 9th, 2007, 5:46:21 PM
+
+ // You can use one of several named masks
+ dateFormat(now, "isoDateTime");
+ // 2007-06-09T17:46:21
+
+ // ...Or add your own
+ dateFormat.masks.hammerTime = 'HH:MM! "Can\'t touch this!"';
+ dateFormat(now, "hammerTime");
+ // 17:46! Can't touch this!
+
+ // When using the standalone dateFormat function,
+ // you can also provide the date as a string
+ dateFormat("Jun 9 2007", "fullDate");
+ // Saturday, June 9, 2007
+
+ // Note that if you don't include the mask argument,
+ // dateFormat.masks.default is used
+ dateFormat(now);
+ // Sat Jun 09 2007 17:46:21
+
+ // And if you don't include the date argument,
+ // the current date and time is used
+ dateFormat();
+ // Sat Jun 09 2007 17:46:22
+
+ // You can also skip the date argument (as long as your mask doesn't
+ // contain any numbers), in which case the current date/time is used
+ dateFormat("longTime");
+ // 5:46:22 PM EST
+
+ // And finally, you can convert local time to UTC time. Simply pass in
+ // true as an additional argument (no argument skipping allowed in this case):
+ dateFormat(now, "longTime", true);
+ // 10:46:21 PM UTC
+
+ // ...Or add the prefix "UTC:" or "GMT:" to your mask.
+ dateFormat(now, "UTC:h:MM:ss TT Z");
+ // 10:46:21 PM UTC
+
+ // You can also get the ISO 8601 week of the year:
+ dateFormat(now, "W");
+ // 42
+
+ // and also get the ISO 8601 numeric representation of the day of the week:
+ dateFormat(now,"N");
+ // 6
+```
+## License
+
+(c) 2007-2009 Steven Levithan [stevenlevithan.com][stevenlevithan], MIT license.
+
+[dateformat]: http://blog.stevenlevithan.com/archives/date-time-format
+[stevenlevithan]: http://stevenlevithan.com/
diff --git a/node_modules/gulp-sym/node_modules/dateformat/bin/cli.js b/node_modules/gulp-sym/node_modules/dateformat/bin/cli.js
new file mode 100755
index 000000000..e095ddc68
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/dateformat/bin/cli.js
@@ -0,0 +1,75 @@
+#!/usr/bin/env node
+/**
+ * dateformat <https://github.com/felixge/node-dateformat>
+ *
+ * Copyright (c) 2014 Charlike Mike Reagent (cli), contributors.
+ * Released under the MIT license.
+ */
+
+'use strict';
+
+/**
+ * Module dependencies.
+ */
+
+var dateFormat = require('../lib/dateformat');
+var meow = require('meow');
+var stdin = require('get-stdin');
+
+var cli = meow({
+ pkg: '../package.json',
+ help: [
+ 'Options',
+ ' --help Show this help',
+ ' --version Current version of package',
+ ' -d | --date Date that want to format (Date object as Number or String)',
+ ' -m | --mask Mask that will use to format the date',
+ ' -u | --utc Convert local time to UTC time or use `UTC:` prefix in mask',
+ ' -g | --gmt You can use `GMT:` prefix in mask',
+ '',
+ 'Usage',
+ ' dateformat [date] [mask]',
+ ' dateformat "Nov 26 2014" "fullDate"',
+ ' dateformat 1416985417095 "dddd, mmmm dS, yyyy, h:MM:ss TT"',
+ ' dateformat 1315361943159 "W"',
+ ' dateformat "UTC:h:MM:ss TT Z"',
+ ' dateformat "longTime" true',
+ ' dateformat "longTime" false true',
+ ' dateformat "Jun 9 2007" "fullDate" true',
+ ' date +%s | dateformat',
+ ''
+ ].join('\n')
+})
+
+var date = cli.input[0] || cli.flags.d || cli.flags.date || Date.now();
+var mask = cli.input[1] || cli.flags.m || cli.flags.mask || dateFormat.masks.default;
+var utc = cli.input[2] || cli.flags.u || cli.flags.utc || false;
+var gmt = cli.input[3] || cli.flags.g || cli.flags.gmt || false;
+
+utc = utc === 'true' ? true : false;
+gmt = gmt === 'true' ? true : false;
+
+if (!cli.input.length) {
+ stdin(function(date) {
+ console.log(dateFormat(date, dateFormat.masks.default, utc, gmt));
+ });
+ return;
+}
+
+if (cli.input.length === 1 && date) {
+ mask = date;
+ date = Date.now();
+ console.log(dateFormat(date, mask, utc, gmt));
+ return;
+}
+
+if (cli.input.length >= 2 && date && mask) {
+ if (mask === 'true' || mask === 'false') {
+ utc = mask === 'true' ? true : false;
+ gmt = !utc;
+ mask = date
+ date = Date.now();
+ }
+ console.log(dateFormat(date, mask, utc, gmt));
+ return;
+}
diff --git a/node_modules/gulp-sym/node_modules/dateformat/lib/dateformat.js b/node_modules/gulp-sym/node_modules/dateformat/lib/dateformat.js
new file mode 100644
index 000000000..eb2574649
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/dateformat/lib/dateformat.js
@@ -0,0 +1,226 @@
+/*
+ * Date Format 1.2.3
+ * (c) 2007-2009 Steven Levithan <stevenlevithan.com>
+ * MIT license
+ *
+ * Includes enhancements by Scott Trenda <scott.trenda.net>
+ * and Kris Kowal <cixar.com/~kris.kowal/>
+ *
+ * Accepts a date, a mask, or a date and a mask.
+ * Returns a formatted version of the given date.
+ * The date defaults to the current date/time.
+ * The mask defaults to dateFormat.masks.default.
+ */
+
+(function(global) {
+ 'use strict';
+
+ var dateFormat = (function() {
+ var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZWN]|'[^']*'|'[^']*'/g;
+ var timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g;
+ var timezoneClip = /[^-+\dA-Z]/g;
+
+ // Regexes and supporting functions are cached through closure
+ return function (date, mask, utc, gmt) {
+
+ // You can't provide utc if you skip other args (use the 'UTC:' mask prefix)
+ if (arguments.length === 1 && kindOf(date) === 'string' && !/\d/.test(date)) {
+ mask = date;
+ date = undefined;
+ }
+
+ date = date || new Date;
+
+ if(!(date instanceof Date)) {
+ date = new Date(date);
+ }
+
+ if (isNaN(date)) {
+ throw TypeError('Invalid date');
+ }
+
+ mask = String(dateFormat.masks[mask] || mask || dateFormat.masks['default']);
+
+ // Allow setting the utc/gmt argument via the mask
+ var maskSlice = mask.slice(0, 4);
+ if (maskSlice === 'UTC:' || maskSlice === 'GMT:') {
+ mask = mask.slice(4);
+ utc = true;
+ if (maskSlice === 'GMT:') {
+ gmt = true;
+ }
+ }
+
+ var _ = utc ? 'getUTC' : 'get';
+ var d = date[_ + 'Date']();
+ var D = date[_ + 'Day']();
+ var m = date[_ + 'Month']();
+ var y = date[_ + 'FullYear']();
+ var H = date[_ + 'Hours']();
+ var M = date[_ + 'Minutes']();
+ var s = date[_ + 'Seconds']();
+ var L = date[_ + 'Milliseconds']();
+ var o = utc ? 0 : date.getTimezoneOffset();
+ var W = getWeek(date);
+ var N = getDayOfWeek(date);
+ var flags = {
+ d: d,
+ dd: pad(d),
+ ddd: dateFormat.i18n.dayNames[D],
+ dddd: dateFormat.i18n.dayNames[D + 7],
+ m: m + 1,
+ mm: pad(m + 1),
+ mmm: dateFormat.i18n.monthNames[m],
+ mmmm: dateFormat.i18n.monthNames[m + 12],
+ yy: String(y).slice(2),
+ yyyy: y,
+ h: H % 12 || 12,
+ hh: pad(H % 12 || 12),
+ H: H,
+ HH: pad(H),
+ M: M,
+ MM: pad(M),
+ s: s,
+ ss: pad(s),
+ l: pad(L, 3),
+ L: pad(Math.round(L / 10)),
+ t: H < 12 ? 'a' : 'p',
+ tt: H < 12 ? 'am' : 'pm',
+ T: H < 12 ? 'A' : 'P',
+ TT: H < 12 ? 'AM' : 'PM',
+ Z: gmt ? 'GMT' : utc ? 'UTC' : (String(date).match(timezone) || ['']).pop().replace(timezoneClip, ''),
+ o: (o > 0 ? '-' : '+') + pad(Math.floor(Math.abs(o) / 60) * 100 + Math.abs(o) % 60, 4),
+ S: ['th', 'st', 'nd', 'rd'][d % 10 > 3 ? 0 : (d % 100 - d % 10 != 10) * d % 10],
+ W: W,
+ N: N
+ };
+
+ return mask.replace(token, function (match) {
+ if (match in flags) {
+ return flags[match];
+ }
+ return match.slice(1, match.length - 1);
+ });
+ };
+ })();
+
+ dateFormat.masks = {
+ 'default': 'ddd mmm dd yyyy HH:MM:ss',
+ 'shortDate': 'm/d/yy',
+ 'mediumDate': 'mmm d, yyyy',
+ 'longDate': 'mmmm d, yyyy',
+ 'fullDate': 'dddd, mmmm d, yyyy',
+ 'shortTime': 'h:MM TT',
+ 'mediumTime': 'h:MM:ss TT',
+ 'longTime': 'h:MM:ss TT Z',
+ 'isoDate': 'yyyy-mm-dd',
+ 'isoTime': 'HH:MM:ss',
+ 'isoDateTime': 'yyyy-mm-dd\'T\'HH:MM:sso',
+ 'isoUtcDateTime': 'UTC:yyyy-mm-dd\'T\'HH:MM:ss\'Z\'',
+ 'expiresHeaderFormat': 'ddd, dd mmm yyyy HH:MM:ss Z'
+ };
+
+ // Internationalization strings
+ dateFormat.i18n = {
+ dayNames: [
+ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat',
+ 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'
+ ],
+ monthNames: [
+ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec',
+ 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'
+ ]
+ };
+
+function pad(val, len) {
+ val = String(val);
+ len = len || 2;
+ while (val.length < len) {
+ val = '0' + val;
+ }
+ return val;
+}
+
+/**
+ * Get the ISO 8601 week number
+ * Based on comments from
+ * http://techblog.procurios.nl/k/n618/news/view/33796/14863/Calculate-ISO-8601-week-and-year-in-javascript.html
+ *
+ * @param {Object} `date`
+ * @return {Number}
+ */
+function getWeek(date) {
+ // Remove time components of date
+ var targetThursday = new Date(date.getFullYear(), date.getMonth(), date.getDate());
+
+ // Change date to Thursday same week
+ targetThursday.setDate(targetThursday.getDate() - ((targetThursday.getDay() + 6) % 7) + 3);
+
+ // Take January 4th as it is always in week 1 (see ISO 8601)
+ var firstThursday = new Date(targetThursday.getFullYear(), 0, 4);
+
+ // Change date to Thursday same week
+ firstThursday.setDate(firstThursday.getDate() - ((firstThursday.getDay() + 6) % 7) + 3);
+
+ // Check if daylight-saving-time-switch occured and correct for it
+ var ds = targetThursday.getTimezoneOffset() - firstThursday.getTimezoneOffset();
+ targetThursday.setHours(targetThursday.getHours() - ds);
+
+ // Number of weeks between target Thursday and first Thursday
+ var weekDiff = (targetThursday - firstThursday) / (86400000*7);
+ return 1 + Math.floor(weekDiff);
+}
+
+/**
+ * Get ISO-8601 numeric representation of the day of the week
+ * 1 (for Monday) through 7 (for Sunday)
+ *
+ * @param {Object} `date`
+ * @return {Number}
+ */
+function getDayOfWeek(date) {
+ var dow = date.getDay();
+ if(dow === 0) {
+ dow = 7;
+ }
+ return dow;
+}
+
+/**
+ * kind-of shortcut
+ * @param {*} val
+ * @return {String}
+ */
+function kindOf(val) {
+ if (val === null) {
+ return 'null';
+ }
+
+ if (val === undefined) {
+ return 'undefined';
+ }
+
+ if (typeof val !== 'object') {
+ return typeof val;
+ }
+
+ if (Array.isArray(val)) {
+ return 'array';
+ }
+
+ return {}.toString.call(val)
+ .slice(8, -1).toLowerCase();
+};
+
+
+
+ if (typeof define === 'function' && define.amd) {
+ define(function () {
+ return dateFormat;
+ });
+ } else if (typeof exports === 'object') {
+ module.exports = dateFormat;
+ } else {
+ global.dateFormat = dateFormat;
+ }
+})(this);
diff --git a/node_modules/gulp-sym/node_modules/dateformat/package.json b/node_modules/gulp-sym/node_modules/dateformat/package.json
new file mode 100644
index 000000000..362956d47
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/dateformat/package.json
@@ -0,0 +1,36 @@
+{
+ "name": "dateformat",
+ "description": "A node.js package for Steven Levithan's excellent dateFormat() function.",
+ "maintainers": "Felix Geisendörfer <felix@debuggable.com>",
+ "homepage": "https://github.com/felixge/node-dateformat",
+ "author": "Steven Levithan",
+ "contributors": [
+ "Steven Levithan",
+ "Felix Geisendörfer <felix@debuggable.com>",
+ "Christoph Tavan <dev@tavan.de>"
+ ],
+ "version": "1.0.12",
+ "license": "MIT",
+ "main": "lib/dateformat",
+ "bin": {
+ "dateformat": "bin/cli.js"
+ },
+ "dependencies": {
+ "get-stdin": "^4.0.1",
+ "meow": "^3.3.0"
+ },
+ "devDependencies": {
+ "underscore": "1.7.0",
+ "mocha": "2.0.1"
+ },
+ "engines": {
+ "node": "*"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "repository": {
+ "type": "git",
+ "url": "https://github.com/felixge/node-dateformat.git"
+ }
+}
diff --git a/node_modules/gulp-sym/node_modules/dateformat/test/test_dayofweek.js b/node_modules/gulp-sym/node_modules/dateformat/test/test_dayofweek.js
new file mode 100644
index 000000000..7f37407cd
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/dateformat/test/test_dayofweek.js
@@ -0,0 +1,15 @@
+var assert = require('assert');
+
+var dateFormat = require('./../lib/dateformat');
+
+describe('dayOfWeek', function() {
+ it('should correctly format the timezone part', function(done) {
+ var start = 10; // the 10 of March 2013 is a Sunday
+ for(var dow = 1; dow <= 7; dow++){
+ var date = new Date('2013-03-' + (start + dow));
+ var N = dateFormat(date, 'N');
+ assert.strictEqual(N, String(dow));
+ }
+ done();
+ });
+});
diff --git a/node_modules/gulp-sym/node_modules/dateformat/test/test_formats.js b/node_modules/gulp-sym/node_modules/dateformat/test/test_formats.js
new file mode 100644
index 000000000..df186caef
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/dateformat/test/test_formats.js
@@ -0,0 +1,76 @@
+var assert = require('assert');
+
+var _ = require('underscore');
+
+var dateFormat = require('../lib/dateformat');
+
+var expects = {
+ 'default': 'Wed Nov 26 2014 13:19:44',
+ 'shortDate': '11/26/14',
+ 'mediumDate': 'Nov 26, 2014',
+ 'longDate': 'November 26, 2014',
+ 'fullDate': 'Wednesday, November 26, 2014',
+ 'shortTime': '1:19 PM',
+ 'mediumTime': '1:19:44 PM',
+ 'longTime': '1:19:44 PM %TZ_PREFIX%%TZ_OFFSET%',
+ 'isoDate': '2014-11-26',
+ 'isoTime': '13:19:44',
+ 'isoDateTime': '2014-11-26T13:19:44%TZ_OFFSET%',
+ 'isoUtcDateTime': '',
+ 'expiresHeaderFormat': 'Wed, 26 Nov 2014 13:19:44 %TZ_PREFIX%%TZ_OFFSET%'
+};
+
+function pad(num, size) {
+ var s = num + '';
+ while (s.length < size) {
+ s = '0' + s;
+ }
+ return s;
+}
+
+function parseOffset(date) {
+ var offset = date.getTimezoneOffset();
+ var hours = Math.floor(-1 * offset / 60);
+ var minutes = (-1 * offset) - (hours * 60);
+ var sign = offset > 0 ? '-' : '+';
+ return {
+ offset: offset,
+ hours: hours,
+ minutes: minutes,
+ sign: sign,
+ };
+}
+
+function timezoneOffset(date) {
+ var offset = parseOffset(date);
+ return offset.sign + pad(offset.hours, 2) + pad(offset.minutes, 2);
+}
+
+describe('dateformat([now], [mask])', function() {
+ _.each(dateFormat.masks, function(value, key) {
+ it('should format `' + key + '` mask', function(done) {
+ var now = new Date(2014, 10, 26, 13, 19, 44);
+ var tzOffset = timezoneOffset(now);
+ var expected = expects[key].replace(/%TZ_PREFIX%/, 'GMT')
+ .replace(/%TZ_OFFSET%/g, tzOffset)
+ .replace(/GMT\+0000/g, 'UTC');
+ if (key === 'isoUtcDateTime') {
+ var offset = parseOffset(now);
+ now.setHours(now.getHours() - offset.hours,
+ now.getMinutes() - offset.minutes);
+ var expected = now.toISOString().replace(/\.000/g, '');
+ }
+ var actual = dateFormat(now, key);
+ assert.strictEqual(actual, expected);
+ done();
+ });
+ });
+ it('should use `default` mask, when `mask` is empty', function(done) {
+ var now = new Date(2014, 10, 26, 13, 19, 44);
+ var expected = expects['default'];
+ var actual = dateFormat(now);
+
+ assert.strictEqual(actual, expected);
+ done();
+ });
+});
diff --git a/node_modules/gulp-sym/node_modules/dateformat/test/test_isoutcdatetime.js b/node_modules/gulp-sym/node_modules/dateformat/test/test_isoutcdatetime.js
new file mode 100644
index 000000000..886b7a5bd
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/dateformat/test/test_isoutcdatetime.js
@@ -0,0 +1,11 @@
+var assert = require('assert');
+
+var dateFormat = require('./../lib/dateformat');
+
+describe('isoUtcDateTime', function() {
+ it('should correctly format the timezone part', function(done) {
+ var actual = dateFormat('2014-06-02T13:23:21-08:00', 'isoUtcDateTime');
+ assert.strictEqual(actual, '2014-06-02T21:23:21Z');
+ done();
+ });
+});
diff --git a/node_modules/gulp-sym/node_modules/dateformat/test/weekofyear/test_weekofyear.js b/node_modules/gulp-sym/node_modules/dateformat/test/weekofyear/test_weekofyear.js
new file mode 100644
index 000000000..d1ddbe818
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/dateformat/test/weekofyear/test_weekofyear.js
@@ -0,0 +1,4 @@
+var dateFormat = require('../lib/dateformat.js');
+
+var val = process.argv[2] || new Date();
+console.log(dateFormat(val, 'W'));
diff --git a/node_modules/gulp-sym/node_modules/dateformat/test/weekofyear/test_weekofyear.sh b/node_modules/gulp-sym/node_modules/dateformat/test/weekofyear/test_weekofyear.sh
new file mode 100644
index 000000000..3c3e69b31
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/dateformat/test/weekofyear/test_weekofyear.sh
@@ -0,0 +1,27 @@
+#!/bin/bash
+
+# this just takes php's date() function as a reference to check if week of year
+# is calculated correctly in the range from 1970 .. 2038 by brute force...
+
+SEQ="seq"
+SYSTEM=`uname`
+if [ "$SYSTEM" = "Darwin" ]; then
+ SEQ="jot"
+fi
+
+for YEAR in {1970..2038}; do
+ for MONTH in {1..12}; do
+ DAYS=$(cal $MONTH $YEAR | egrep "28|29|30|31" |tail -1 |awk '{print $NF}')
+ for DAY in $( $SEQ $DAYS ); do
+ DATE=$YEAR-$MONTH-$DAY
+ echo -n $DATE ...
+ NODEVAL=$(node test_weekofyear.js $DATE)
+ PHPVAL=$(php -r "echo intval(date('W', strtotime('$DATE')));")
+ if [ "$NODEVAL" -ne "$PHPVAL" ]; then
+ echo "MISMATCH: node: $NODEVAL vs php: $PHPVAL for date $DATE"
+ else
+ echo " OK"
+ fi
+ done
+ done
+done
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/.npmignore b/node_modules/gulp-sym/node_modules/gulp-util/.npmignore
new file mode 100644
index 000000000..5cdb2e5e9
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/.npmignore
@@ -0,0 +1,7 @@
+.DS_Store
+*.log
+node_modules
+build
+*.node
+components
+test \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/.travis.yml b/node_modules/gulp-sym/node_modules/gulp-util/.travis.yml
new file mode 100644
index 000000000..7c1662070
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/.travis.yml
@@ -0,0 +1,5 @@
+language: node_js
+node_js:
+ - "0.10"
+after_script:
+ - npm run coveralls \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/LICENSE b/node_modules/gulp-sym/node_modules/gulp-util/LICENSE
new file mode 100755
index 000000000..7cbe012c6
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2014 Fractal <contact@wearefractal.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/README.md b/node_modules/gulp-sym/node_modules/gulp-util/README.md
new file mode 100644
index 000000000..a8d9b19ef
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/README.md
@@ -0,0 +1,140 @@
+# gulp-util [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Dependency Status][depstat-image]][depstat-url]
+
+## Information
+
+<table>
+<tr>
+<td>Package</td><td>gulp-util</td>
+</tr>
+<tr>
+<td>Description</td>
+<td>Utility functions for gulp plugins</td>
+</tr>
+<tr>
+<td>Node Version</td>
+<td>>= 0.9</td>
+</tr>
+</table>
+
+## Usage
+
+```javascript
+var gutil = require('gulp-util');
+
+gutil.log('stuff happened', 'Really it did', gutil.colors.cyan('123'));
+gutil.beep();
+
+gutil.replaceExtension('file.coffee', '.js'); // file.js
+
+var opt = {
+ name: 'todd',
+ file: someGulpFile
+};
+gutil.template('test <%= name %> <%= file.path %>', opt) // test todd /js/hi.js
+```
+
+### log(msg...)
+
+Logs stuff. Already prefixed with [gulp] and all that. Use the right colors for values. If you pass in multiple arguments it will join them by a space.
+
+```
+values (files, module names, etc.) = magenta
+numbers (times, counts, etc) = cyan
+```
+
+### replaceExtension(path, newExtension)
+
+Replaces a file extension in a path. Returns the new path.
+
+### isStream(obj)
+
+Returns true or false if an object is a stream.
+
+### isBuffer(obj)
+
+Returns true or false if an object is a Buffer.
+
+### template(string[, data])
+
+This is a lodash.template function wrapper. You must pass in a valid gulp file object so it is available to the user or it will error. You can not configure any of the delimiters. Look at the [lodash docs](http://lodash.com/docs#template) for more info.
+
+## new File(obj)
+
+This is just [vinyl](https://github.com/wearefractal/vinyl)
+
+```javascript
+var file = new gutil.File({
+ base: join(__dirname, './fixtures/'),
+ cwd: __dirname,
+ path: join(__dirname, './fixtures/test.coffee')
+});
+```
+
+## noop()
+
+Returns a stream that does nothing but pass data straight through.
+
+```javascript
+// gulp should be called like this :
+// $ gulp --type production
+gulp.task('scripts', function() {
+ gulp.src('src/**/*.js')
+ .pipe(concat('script.js'))
+ .pipe(gutil.env.type === 'production' ? uglify() : gutil.noop())
+ .pipe(gulp.dest('dist/');
+});
+```
+
+## buffer(cb)
+
+This is similar to es.wait but instead of buffering text into one string it buffers anything into an array (so very useful for file objects).
+
+Returns a stream that can be piped to.
+
+The stream will emit one data event after the stream piped to it has ended. The data will be the same array passed to the callback.
+
+Callback is optional and receives two arguments: error and data
+
+```javascript
+gulp.src('stuff/*.js')
+ .pipe(gutil.buffer(function(err, files){
+
+ });
+```
+
+## new PluginError(pluginName, message[, options])
+
+- pluginName should be the module name of your plugin
+- message can be a string or an existing error
+- By default the stack will not be shown. Set `options.showStack` to true if you think the stack is important for your error.
+- If you pass an error in as the message the stack will be pulled from that, otherwise one will be created.
+- Note that if you pass in a custom stack string you need to include the message along with that.
+
+These are all acceptable forms of instantiation:
+
+```javascript
+var err = new gutil.PluginError('test', {
+ message: 'something broke'
+});
+
+var err = new gutil.PluginError({
+ plugin: 'test',
+ message: 'something broke'
+});
+
+var err = new gutil.PluginError('test', 'something broke');
+
+var err = new gutil.PluginError('test', 'something broke', {showStack: true});
+
+var existingError = new Error('OMG');
+var err = new gutil.PluginError('test', existingError, {showStack: true});
+```
+
+[npm-url]: https://npmjs.org/package/gulp-util
+[npm-image]: https://badge.fury.io/js/gulp-util.svg
+[travis-url]: https://travis-ci.org/gulpjs/gulp-util
+[travis-image]: https://travis-ci.org/gulpjs/gulp-util.svg?branch=master
+[coveralls-url]: https://coveralls.io/r/gulpjs/gulp-util
+[coveralls-image]: https://coveralls.io/repos/gulpjs/gulp-util/badge.png
+[depstat-url]: https://david-dm.org/gulpjs/gulp-util
+[depstat-image]: https://david-dm.org/gulpjs/gulp-util.svg
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/index.js b/node_modules/gulp-sym/node_modules/gulp-util/index.js
new file mode 100644
index 000000000..6746ee4be
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/index.js
@@ -0,0 +1,18 @@
+module.exports = {
+ File: require('./lib/File'),
+ replaceExtension: require('./lib/replaceExtension'),
+ colors: require('./lib/colors'),
+ date: require('./lib/date'),
+ log: require('./lib/log'),
+ template: require('./lib/template'),
+ env: require('./lib/env'),
+ beep: require('./lib/beep'),
+ noop: require('./lib/noop'),
+ isStream: require('./lib/isStream'),
+ isBuffer: require('./lib/isBuffer'),
+ isNull: require('./lib/isNull'),
+ linefeed: require('./lib/linefeed'),
+ combine: require('./lib/combine'),
+ buffer: require('./lib/buffer'),
+ PluginError: require('./lib/PluginError')
+}; \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/File.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/File.js
new file mode 100644
index 000000000..690a508a6
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/File.js
@@ -0,0 +1 @@
+module.exports = require('vinyl'); \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/PluginError.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/PluginError.js
new file mode 100644
index 000000000..6640346ed
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/PluginError.js
@@ -0,0 +1,64 @@
+var util = require('util');
+var colors = require('./colors');
+
+// wow what a clusterfuck
+var parseOptions = function(plugin, message, opt) {
+ if (!opt) opt = {};
+ if (typeof plugin === 'object') {
+ opt = plugin;
+ } else if (message instanceof Error) {
+ opt.error = message;
+ opt.plugin = plugin;
+ } else if (typeof message === 'object') {
+ opt = message;
+ opt.plugin = plugin;
+ } else if (typeof opt === 'object') {
+ opt.plugin = plugin;
+ opt.message = message;
+ }
+ return opt;
+};
+
+function PluginError(plugin, message, opt) {
+ if (!(this instanceof PluginError)) throw new Error('Call PluginError using new');
+
+ Error.call(this);
+
+ var options = parseOptions(plugin, message, opt);
+
+ this.plugin = options.plugin;
+ this.showStack = options.showStack === true;
+
+ var properties = ['name', 'message', 'fileName', 'lineNumber', 'stack'];
+
+ // if options has an error, grab details from it
+ if (options.error) {
+ properties.forEach(function(prop) {
+ if (prop in options.error) this[prop] = options.error[prop];
+ }, this);
+ }
+
+ // options object can override
+ properties.forEach(function(prop) {
+ if (prop in options) this[prop] = options[prop];
+ }, this);
+
+ // defaults
+ if (!this.name) this.name = 'Error';
+
+ // TODO: figure out why this explodes mocha
+ if (!this.stack) Error.captureStackTrace(this, arguments.callee || this.constructor);
+
+ if (!this.plugin) throw new Error('Missing plugin name');
+ if (!this.message) throw new Error('Missing error message');
+}
+
+util.inherits(PluginError, Error);
+
+PluginError.prototype.toString = function () {
+ var sig = this.name+' in plugin \''+colors.cyan(this.plugin)+'\'';
+ var msg = this.showStack ? (this._stack || this.stack) : this.message;
+ return sig+'\n'+msg;
+};
+
+module.exports = PluginError;
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/beep.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/beep.js
new file mode 100644
index 000000000..5473d7548
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/beep.js
@@ -0,0 +1,3 @@
+module.exports = function() {
+ process.stdout.write('\x07');
+};
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/buffer.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/buffer.js
new file mode 100644
index 000000000..4cb064aca
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/buffer.js
@@ -0,0 +1,15 @@
+var through = require('through2');
+
+module.exports = function(fn) {
+ var buf = [];
+ var end = function(cb) {
+ this.push(buf);
+ cb();
+ if(fn) fn(null, buf);
+ };
+ var push = function(data, enc, cb) {
+ buf.push(data);
+ cb();
+ };
+ return through.obj(push, end);
+}; \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/colors.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/colors.js
new file mode 100644
index 000000000..bc8049406
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/colors.js
@@ -0,0 +1 @@
+module.exports = require('chalk'); \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/combine.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/combine.js
new file mode 100644
index 000000000..f20712d20
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/combine.js
@@ -0,0 +1,11 @@
+var pipeline = require('multipipe');
+
+module.exports = function(){
+ var args = arguments;
+ if (args.length === 1 && Array.isArray(args[0])) {
+ args = args[0];
+ }
+ return function(){
+ return pipeline.apply(pipeline, args);
+ };
+};
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/date.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/date.js
new file mode 100644
index 000000000..935793cc6
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/date.js
@@ -0,0 +1 @@
+module.exports = require('dateformat'); \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/env.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/env.js
new file mode 100644
index 000000000..ea1e03e4a
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/env.js
@@ -0,0 +1,4 @@
+var parseArgs = require('minimist');
+var argv = parseArgs(process.argv.slice(2));
+
+module.exports = argv; \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/isBuffer.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/isBuffer.js
new file mode 100644
index 000000000..0e23782c4
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/isBuffer.js
@@ -0,0 +1,7 @@
+var buf = require('buffer');
+var Buffer = buf.Buffer;
+
+// could use Buffer.isBuffer but this is the same exact thing...
+module.exports = function(o) {
+ return typeof o === 'object' && o instanceof Buffer;
+}; \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/isNull.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/isNull.js
new file mode 100644
index 000000000..403bb30e8
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/isNull.js
@@ -0,0 +1,3 @@
+module.exports = function(v) {
+ return v === null;
+}; \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/isStream.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/isStream.js
new file mode 100644
index 000000000..9ce0929b0
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/isStream.js
@@ -0,0 +1,5 @@
+var Stream = require('stream').Stream;
+
+module.exports = function(o) {
+ return !!o && o instanceof Stream;
+}; \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/linefeed.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/linefeed.js
new file mode 100644
index 000000000..5b0dfa4b1
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/linefeed.js
@@ -0,0 +1 @@
+module.exports = '\n'; \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/log.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/log.js
new file mode 100644
index 000000000..e33d15ed9
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/log.js
@@ -0,0 +1,10 @@
+var colors = require('./colors');
+var date = require('./date');
+
+module.exports = function(){
+ var time = '['+colors.grey(date(new Date(), 'HH:MM:ss'))+']';
+ var args = Array.prototype.slice.call(arguments);
+ args.unshift(time);
+ console.log.apply(console, args);
+ return this;
+};
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/noop.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/noop.js
new file mode 100644
index 000000000..7862cb161
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/noop.js
@@ -0,0 +1,5 @@
+var through = require('through2');
+
+module.exports = function () {
+ return through.obj();
+};
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/replaceExtension.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/replaceExtension.js
new file mode 100644
index 000000000..3f76938e4
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/replaceExtension.js
@@ -0,0 +1,9 @@
+var path = require('path');
+
+module.exports = function(npath, ext) {
+ if (typeof npath !== 'string') return npath;
+ if (npath.length === 0) return npath;
+
+ var nFileName = path.basename(npath, path.extname(npath))+ext;
+ return path.join(path.dirname(npath), nFileName);
+}; \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/lib/template.js b/node_modules/gulp-sym/node_modules/gulp-util/lib/template.js
new file mode 100644
index 000000000..c467820f3
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/lib/template.js
@@ -0,0 +1,19 @@
+var template = require('lodash.template');
+var reInterpolate = require('lodash._reinterpolate');
+
+var forcedSettings = {
+ escape: /<%-([\s\S]+?)%>/g,
+ evaluate: /<%([\s\S]+?)%>/g,
+ interpolate: reInterpolate
+};
+
+module.exports = function(tmpl, data){
+ var fn = template(tmpl, null, forcedSettings);
+
+ var wrapped = function(o) {
+ if (typeof o === 'undefined' || typeof o.file === 'undefined') throw new Error('Failed to provide the current file as "file" to the template');
+ return fn(o);
+ };
+
+ return (data ? wrapped(data) : wrapped);
+};
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/node_modules/.bin/dateformat b/node_modules/gulp-sym/node_modules/gulp-util/node_modules/.bin/dateformat
new file mode 120000
index 000000000..017f21508
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/node_modules/.bin/dateformat
@@ -0,0 +1 @@
+../../../dateformat/bin/cli.js \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/gulp-util/package.json b/node_modules/gulp-sym/node_modules/gulp-util/package.json
new file mode 100644
index 000000000..f4bd92d5e
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/gulp-util/package.json
@@ -0,0 +1,44 @@
+{
+ "name": "gulp-util",
+ "description": "Utility functions for gulp plugins",
+ "version": "2.2.20",
+ "homepage": "http://github.com/wearefractal/gulp-util",
+ "repository": "git://github.com/wearefractal/gulp-util.git",
+ "author": "Fractal <contact@wearefractal.com> (http://wearefractal.com/)",
+ "main": "./index.js",
+ "dependencies": {
+ "chalk": "^0.5.0",
+ "dateformat": "^1.0.7-1.2.3",
+ "lodash._reinterpolate": "^2.4.1",
+ "lodash.template": "^2.4.1",
+ "minimist": "^0.2.0",
+ "multipipe": "^0.1.0",
+ "through2": "^0.5.0",
+ "vinyl": "^0.2.1"
+ },
+ "devDependencies": {
+ "mocha": "^1.17.0",
+ "should": "^4.0.0",
+ "mocha-lcov-reporter": "^0.0.1",
+ "coveralls": "^2.7.0",
+ "istanbul": "^0.2.3",
+ "rimraf": "^2.2.5",
+ "jshint": "^2.4.1",
+ "buffer-equal": "~0.0.1",
+ "lodash.templatesettings": "^2.4.1",
+ "event-stream": "^3.1.0"
+ },
+ "scripts": {
+ "test": "mocha --reporter spec && jshint",
+ "coveralls": "istanbul cover _mocha --report lcovonly -- -R spec && cat ./coverage/lcov.info | coveralls && rm -rf ./coverage"
+ },
+ "engines": {
+ "node": ">= 0.9"
+ },
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://github.com/wearefractal/gulp-util/raw/master/LICENSE"
+ }
+ ]
+}
diff --git a/node_modules/gulp-sym/node_modules/has-ansi/cli.js b/node_modules/gulp-sym/node_modules/has-ansi/cli.js
new file mode 100755
index 000000000..e0956fcc7
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/has-ansi/cli.js
@@ -0,0 +1,53 @@
+#!/usr/bin/env node
+'use strict';
+var pkg = require('./package.json');
+var hasAnsi = require('./');
+var input = process.argv[2];
+
+function stdin(cb) {
+ var ret = '';
+ process.stdin.setEncoding('utf8');
+ process.stdin.on('data', function (data) {
+ ret += data;
+ });
+ process.stdin.on('end', function () {
+ cb(ret);
+ });
+}
+
+function help() {
+ console.log([
+ pkg.description,
+ '',
+ 'Usage',
+ ' $ has-ansi <string>',
+ ' $ echo <string> | has-ansi',
+ '',
+ 'Exits with code 0 if input has ANSI escape codes and 1 if not'
+ ].join('\n'));
+}
+
+function init(data) {
+ process.exit(hasAnsi(data) ? 0 : 1);
+}
+
+if (process.argv.indexOf('--help') !== -1) {
+ help();
+ return;
+}
+
+if (process.argv.indexOf('--version') !== -1) {
+ console.log(pkg.version);
+ return;
+}
+
+if (process.stdin.isTTY) {
+ if (!input) {
+ help();
+ return;
+ }
+
+ init(input);
+} else {
+ stdin(init);
+}
diff --git a/node_modules/gulp-sym/node_modules/has-ansi/index.js b/node_modules/gulp-sym/node_modules/has-ansi/index.js
new file mode 100644
index 000000000..98fae0676
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/has-ansi/index.js
@@ -0,0 +1,4 @@
+'use strict';
+var ansiRegex = require('ansi-regex');
+var re = new RegExp(ansiRegex().source); // remove the `g` flag
+module.exports = re.test.bind(re);
diff --git a/node_modules/gulp-sym/node_modules/has-ansi/package.json b/node_modules/gulp-sym/node_modules/has-ansi/package.json
new file mode 100644
index 000000000..047ff0d07
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/has-ansi/package.json
@@ -0,0 +1,57 @@
+{
+ "name": "has-ansi",
+ "version": "0.1.0",
+ "description": "Check if a string has ANSI escape codes",
+ "license": "MIT",
+ "repository": "sindresorhus/has-ansi",
+ "bin": {
+ "has-ansi": "cli.js"
+ },
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "http://sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "files": [
+ "index.js",
+ "cli.js"
+ ],
+ "keywords": [
+ "cli",
+ "bin",
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "string",
+ "tty",
+ "escape",
+ "shell",
+ "xterm",
+ "command-line",
+ "text",
+ "regex",
+ "regexp",
+ "re",
+ "match",
+ "test",
+ "find",
+ "pattern",
+ "has"
+ ],
+ "dependencies": {
+ "ansi-regex": "^0.2.0"
+ },
+ "devDependencies": {
+ "mocha": "*"
+ }
+}
diff --git a/node_modules/gulp-sym/node_modules/has-ansi/readme.md b/node_modules/gulp-sym/node_modules/has-ansi/readme.md
new file mode 100644
index 000000000..070221231
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/has-ansi/readme.md
@@ -0,0 +1,45 @@
+# has-ansi [![Build Status](https://travis-ci.org/sindresorhus/has-ansi.svg?branch=master)](https://travis-ci.org/sindresorhus/has-ansi)
+
+> Check if a string has [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
+
+
+## Install
+
+```sh
+$ npm install --save has-ansi
+```
+
+
+## Usage
+
+```js
+var hasAnsi = require('has-ansi');
+
+hasAnsi('\u001b[4mcake\u001b[0m');
+//=> true
+
+hasAnsi('cake');
+//=> false
+```
+
+
+## CLI
+
+```sh
+$ npm install --global has-ansi
+```
+
+```
+$ has-ansi --help
+
+Usage
+ $ has-ansi <string>
+ $ echo <string> | has-ansi
+
+Exits with code 0 if input has ANSI escape codes and 1 if not
+```
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/gulp-sym/node_modules/lodash.template/LICENSE.txt b/node_modules/gulp-sym/node_modules/lodash.template/LICENSE.txt
new file mode 100644
index 000000000..49869bbab
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/lodash.template/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
+Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/lodash.template/README.md b/node_modules/gulp-sym/node_modules/lodash.template/README.md
new file mode 100644
index 000000000..e89bd0db6
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/lodash.template/README.md
@@ -0,0 +1,15 @@
+# lodash.template v2.4.1
+
+The [Lo-Dash](http://lodash.com/) function [`_.template`](http://lodash.com/docs#template) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).
+
+## Author
+
+| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") |
+|---|
+| [John-David Dalton](http://allyoucanleet.com/) |
+
+## Contributors
+
+| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") |
+|---|---|---|
+| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |
diff --git a/node_modules/gulp-sym/node_modules/lodash.template/index.js b/node_modules/gulp-sym/node_modules/lodash.template/index.js
new file mode 100644
index 000000000..230f8ee86
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/lodash.template/index.js
@@ -0,0 +1,216 @@
+/**
+ * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
+ * Build: `lodash modularize modern exports="npm" -o ./npm/`
+ * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <http://lodash.com/license>
+ */
+var defaults = require('lodash.defaults'),
+ escape = require('lodash.escape'),
+ escapeStringChar = require('lodash._escapestringchar'),
+ keys = require('lodash.keys'),
+ reInterpolate = require('lodash._reinterpolate'),
+ templateSettings = require('lodash.templatesettings'),
+ values = require('lodash.values');
+
+/** Used to match empty string literals in compiled template source */
+var reEmptyStringLeading = /\b__p \+= '';/g,
+ reEmptyStringMiddle = /\b(__p \+=) '' \+/g,
+ reEmptyStringTrailing = /(__e\(.*?\)|\b__t\)) \+\n'';/g;
+
+/**
+ * Used to match ES6 template delimiters
+ * http://people.mozilla.org/~jorendorff/es6-draft.html#sec-literals-string-literals
+ */
+var reEsTemplate = /\$\{([^\\}]*(?:\\.[^\\}]*)*)\}/g;
+
+/** Used to ensure capturing order of template delimiters */
+var reNoMatch = /($^)/;
+
+/** Used to match unescaped characters in compiled string literals */
+var reUnescapedString = /['\n\r\t\u2028\u2029\\]/g;
+
+/**
+ * A micro-templating method that handles arbitrary delimiters, preserves
+ * whitespace, and correctly escapes quotes within interpolated code.
+ *
+ * Note: In the development build, `_.template` utilizes sourceURLs for easier
+ * debugging. See http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl
+ *
+ * For more information on precompiling templates see:
+ * http://lodash.com/custom-builds
+ *
+ * For more information on Chrome extension sandboxes see:
+ * http://developer.chrome.com/stable/extensions/sandboxingEval.html
+ *
+ * @static
+ * @memberOf _
+ * @category Utilities
+ * @param {string} text The template text.
+ * @param {Object} data The data object used to populate the text.
+ * @param {Object} [options] The options object.
+ * @param {RegExp} [options.escape] The "escape" delimiter.
+ * @param {RegExp} [options.evaluate] The "evaluate" delimiter.
+ * @param {Object} [options.imports] An object to import into the template as local variables.
+ * @param {RegExp} [options.interpolate] The "interpolate" delimiter.
+ * @param {string} [sourceURL] The sourceURL of the template's compiled source.
+ * @param {string} [variable] The data object variable name.
+ * @returns {Function|string} Returns a compiled function when no `data` object
+ * is given, else it returns the interpolated text.
+ * @example
+ *
+ * // using the "interpolate" delimiter to create a compiled template
+ * var compiled = _.template('hello <%= name %>');
+ * compiled({ 'name': 'fred' });
+ * // => 'hello fred'
+ *
+ * // using the "escape" delimiter to escape HTML in data property values
+ * _.template('<b><%- value %></b>', { 'value': '<script>' });
+ * // => '<b>&lt;script&gt;</b>'
+ *
+ * // using the "evaluate" delimiter to generate HTML
+ * var list = '<% _.forEach(people, function(name) { %><li><%- name %></li><% }); %>';
+ * _.template(list, { 'people': ['fred', 'barney'] });
+ * // => '<li>fred</li><li>barney</li>'
+ *
+ * // using the ES6 delimiter as an alternative to the default "interpolate" delimiter
+ * _.template('hello ${ name }', { 'name': 'pebbles' });
+ * // => 'hello pebbles'
+ *
+ * // using the internal `print` function in "evaluate" delimiters
+ * _.template('<% print("hello " + name); %>!', { 'name': 'barney' });
+ * // => 'hello barney!'
+ *
+ * // using a custom template delimiters
+ * _.templateSettings = {
+ * 'interpolate': /{{([\s\S]+?)}}/g
+ * };
+ *
+ * _.template('hello {{ name }}!', { 'name': 'mustache' });
+ * // => 'hello mustache!'
+ *
+ * // using the `imports` option to import jQuery
+ * var list = '<% jq.each(people, function(name) { %><li><%- name %></li><% }); %>';
+ * _.template(list, { 'people': ['fred', 'barney'] }, { 'imports': { 'jq': jQuery } });
+ * // => '<li>fred</li><li>barney</li>'
+ *
+ * // using the `sourceURL` option to specify a custom sourceURL for the template
+ * var compiled = _.template('hello <%= name %>', null, { 'sourceURL': '/basic/greeting.jst' });
+ * compiled(data);
+ * // => find the source of "greeting.jst" under the Sources tab or Resources panel of the web inspector
+ *
+ * // using the `variable` option to ensure a with-statement isn't used in the compiled template
+ * var compiled = _.template('hi <%= data.name %>!', null, { 'variable': 'data' });
+ * compiled.source;
+ * // => function(data) {
+ * var __t, __p = '', __e = _.escape;
+ * __p += 'hi ' + ((__t = ( data.name )) == null ? '' : __t) + '!';
+ * return __p;
+ * }
+ *
+ * // using the `source` property to inline compiled templates for meaningful
+ * // line numbers in error messages and a stack trace
+ * fs.writeFileSync(path.join(cwd, 'jst.js'), '\
+ * var JST = {\
+ * "main": ' + _.template(mainText).source + '\
+ * };\
+ * ');
+ */
+function template(text, data, options) {
+ // based on John Resig's `tmpl` implementation
+ // http://ejohn.org/blog/javascript-micro-templating/
+ // and Laura Doktorova's doT.js
+ // https://github.com/olado/doT
+ var settings = templateSettings.imports._.templateSettings || templateSettings;
+ text = String(text || '');
+
+ // avoid missing dependencies when `iteratorTemplate` is not defined
+ options = defaults({}, options, settings);
+
+ var imports = defaults({}, options.imports, settings.imports),
+ importsKeys = keys(imports),
+ importsValues = values(imports);
+
+ var isEvaluating,
+ index = 0,
+ interpolate = options.interpolate || reNoMatch,
+ source = "__p += '";
+
+ // compile the regexp to match each delimiter
+ var reDelimiters = RegExp(
+ (options.escape || reNoMatch).source + '|' +
+ interpolate.source + '|' +
+ (interpolate === reInterpolate ? reEsTemplate : reNoMatch).source + '|' +
+ (options.evaluate || reNoMatch).source + '|$'
+ , 'g');
+
+ text.replace(reDelimiters, function(match, escapeValue, interpolateValue, esTemplateValue, evaluateValue, offset) {
+ interpolateValue || (interpolateValue = esTemplateValue);
+
+ // escape characters that cannot be included in string literals
+ source += text.slice(index, offset).replace(reUnescapedString, escapeStringChar);
+
+ // replace delimiters with snippets
+ if (escapeValue) {
+ source += "' +\n__e(" + escapeValue + ") +\n'";
+ }
+ if (evaluateValue) {
+ isEvaluating = true;
+ source += "';\n" + evaluateValue + ";\n__p += '";
+ }
+ if (interpolateValue) {
+ source += "' +\n((__t = (" + interpolateValue + ")) == null ? '' : __t) +\n'";
+ }
+ index = offset + match.length;
+
+ // the JS engine embedded in Adobe products requires returning the `match`
+ // string in order to produce the correct `offset` value
+ return match;
+ });
+
+ source += "';\n";
+
+ // if `variable` is not specified, wrap a with-statement around the generated
+ // code to add the data object to the top of the scope chain
+ var variable = options.variable,
+ hasVariable = variable;
+
+ if (!hasVariable) {
+ variable = 'obj';
+ source = 'with (' + variable + ') {\n' + source + '\n}\n';
+ }
+ // cleanup code by stripping empty strings
+ source = (isEvaluating ? source.replace(reEmptyStringLeading, '') : source)
+ .replace(reEmptyStringMiddle, '$1')
+ .replace(reEmptyStringTrailing, '$1;');
+
+ // frame code as the function body
+ source = 'function(' + variable + ') {\n' +
+ (hasVariable ? '' : variable + ' || (' + variable + ' = {});\n') +
+ "var __t, __p = '', __e = _.escape" +
+ (isEvaluating
+ ? ', __j = Array.prototype.join;\n' +
+ "function print() { __p += __j.call(arguments, '') }\n"
+ : ';\n'
+ ) +
+ source +
+ 'return __p\n}';
+
+ try {
+ var result = Function(importsKeys, 'return ' + source ).apply(undefined, importsValues);
+ } catch(e) {
+ e.source = source;
+ throw e;
+ }
+ if (data) {
+ return result(data);
+ }
+ // provide the compiled function's source by its `toString` method, in
+ // supported environments, or the `source` property as a convenience for
+ // inlining compiled templates during the build process
+ result.source = source;
+ return result;
+}
+
+module.exports = template;
diff --git a/node_modules/gulp-sym/node_modules/lodash.template/package.json b/node_modules/gulp-sym/node_modules/lodash.template/package.json
new file mode 100644
index 000000000..56b517ec4
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/lodash.template/package.json
@@ -0,0 +1,26 @@
+{
+ "name": "lodash.template",
+ "version": "2.4.1",
+ "description": "The Lo-Dash function `_.template` as a Node.js module generated by lodash-cli.",
+ "homepage": "http://lodash.com/custom-builds",
+ "license": "MIT",
+ "keywords": ["functional", "lodash", "lodash-modularized", "server", "util"],
+ "author": "John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)",
+ "contributors": [
+ "John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)",
+ "Blaine Bublitz <blaine@iceddev.com> (http://www.iceddev.com/)",
+ "Kit Cambridge <github@kitcambridge.be> (http://kitcambridge.be/)",
+ "Mathias Bynens <mathias@qiwi.be> (http://mathiasbynens.be/)"
+ ],
+ "bugs": "https://github.com/lodash/lodash-cli/issues",
+ "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" },
+ "dependencies": {
+ "lodash.defaults": "~2.4.1",
+ "lodash.escape": "~2.4.1",
+ "lodash._escapestringchar": "~2.4.1",
+ "lodash.keys": "~2.4.1",
+ "lodash._reinterpolate": "~2.4.1",
+ "lodash.templatesettings": "~2.4.1",
+ "lodash.values": "~2.4.1"
+ }
+}
diff --git a/node_modules/gulp-sym/node_modules/lodash.templatesettings/LICENSE.txt b/node_modules/gulp-sym/node_modules/lodash.templatesettings/LICENSE.txt
new file mode 100644
index 000000000..49869bbab
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/lodash.templatesettings/LICENSE.txt
@@ -0,0 +1,22 @@
+Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
+Based on Underscore.js 1.5.2, copyright 2009-2013 Jeremy Ashkenas,
+DocumentCloud and Investigative Reporters & Editors <http://underscorejs.org/>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/lodash.templatesettings/README.md b/node_modules/gulp-sym/node_modules/lodash.templatesettings/README.md
new file mode 100644
index 000000000..d9ce72bcf
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/lodash.templatesettings/README.md
@@ -0,0 +1,15 @@
+# lodash.templatesettings v2.4.1
+
+The [Lo-Dash](http://lodash.com/) object [`_.templateSettings`](http://lodash.com/docs#templateSettings) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).
+
+## Author
+
+| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton "Follow @jdalton on Twitter") |
+|---|
+| [John-David Dalton](http://allyoucanleet.com/) |
+
+## Contributors
+
+| [![twitter/blainebublitz](http://gravatar.com/avatar/ac1c67fd906c9fecd823ce302283b4c1?s=70)](https://twitter.com/blainebublitz "Follow @BlaineBublitz on Twitter") | [![twitter/kitcambridge](http://gravatar.com/avatar/6662a1d02f351b5ef2f8b4d815804661?s=70)](https://twitter.com/kitcambridge "Follow @kitcambridge on Twitter") | [![twitter/mathias](http://gravatar.com/avatar/24e08a9ea84deb17ae121074d0f17125?s=70)](https://twitter.com/mathias "Follow @mathias on Twitter") |
+|---|---|---|
+| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |
diff --git a/node_modules/gulp-sym/node_modules/lodash.templatesettings/index.js b/node_modules/gulp-sym/node_modules/lodash.templatesettings/index.js
new file mode 100644
index 000000000..bba7e231c
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/lodash.templatesettings/index.js
@@ -0,0 +1,73 @@
+/**
+ * Lo-Dash 2.4.1 (Custom Build) <http://lodash.com/>
+ * Build: `lodash modularize modern exports="npm" -o ./npm/`
+ * Copyright 2012-2013 The Dojo Foundation <http://dojofoundation.org/>
+ * Based on Underscore.js 1.5.2 <http://underscorejs.org/LICENSE>
+ * Copyright 2009-2013 Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
+ * Available under MIT license <http://lodash.com/license>
+ */
+var escape = require('lodash.escape'),
+ reInterpolate = require('lodash._reinterpolate');
+
+/**
+ * By default, the template delimiters used by Lo-Dash are similar to those in
+ * embedded Ruby (ERB). Change the following template settings to use alternative
+ * delimiters.
+ *
+ * @static
+ * @memberOf _
+ * @type Object
+ */
+var templateSettings = {
+
+ /**
+ * Used to detect `data` property values to be HTML-escaped.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+ 'escape': /<%-([\s\S]+?)%>/g,
+
+ /**
+ * Used to detect code to be evaluated.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+ 'evaluate': /<%([\s\S]+?)%>/g,
+
+ /**
+ * Used to detect `data` property values to inject.
+ *
+ * @memberOf _.templateSettings
+ * @type RegExp
+ */
+ 'interpolate': reInterpolate,
+
+ /**
+ * Used to reference the data object in the template text.
+ *
+ * @memberOf _.templateSettings
+ * @type string
+ */
+ 'variable': '',
+
+ /**
+ * Used to import variables into the compiled template.
+ *
+ * @memberOf _.templateSettings
+ * @type Object
+ */
+ 'imports': {
+
+ /**
+ * A reference to the `lodash` function.
+ *
+ * @memberOf _.templateSettings.imports
+ * @type Function
+ */
+ '_': { 'escape': escape }
+ }
+};
+
+module.exports = templateSettings;
diff --git a/node_modules/gulp-sym/node_modules/lodash.templatesettings/package.json b/node_modules/gulp-sym/node_modules/lodash.templatesettings/package.json
new file mode 100644
index 000000000..e4959713d
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/lodash.templatesettings/package.json
@@ -0,0 +1,21 @@
+{
+ "name": "lodash.templatesettings",
+ "version": "2.4.1",
+ "description": "The Lo-Dash object `_.templateSettings` as a Node.js module generated by lodash-cli.",
+ "homepage": "http://lodash.com/custom-builds",
+ "license": "MIT",
+ "keywords": ["functional", "lodash", "lodash-modularized", "server", "util"],
+ "author": "John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)",
+ "contributors": [
+ "John-David Dalton <john.david.dalton@gmail.com> (http://allyoucanleet.com/)",
+ "Blaine Bublitz <blaine@iceddev.com> (http://www.iceddev.com/)",
+ "Kit Cambridge <github@kitcambridge.be> (http://kitcambridge.be/)",
+ "Mathias Bynens <mathias@qiwi.be> (http://mathiasbynens.be/)"
+ ],
+ "bugs": "https://github.com/lodash/lodash-cli/issues",
+ "repository": { "type": "git", "url": "https://github.com/lodash/lodash-cli.git" },
+ "dependencies": {
+ "lodash.escape": "~2.4.1",
+ "lodash._reinterpolate": "~2.4.1"
+ }
+}
diff --git a/node_modules/gulp-sym/node_modules/minimist/.travis.yml b/node_modules/gulp-sym/node_modules/minimist/.travis.yml
new file mode 100644
index 000000000..cc4dba29d
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/.travis.yml
@@ -0,0 +1,4 @@
+language: node_js
+node_js:
+ - "0.8"
+ - "0.10"
diff --git a/node_modules/gulp-sym/node_modules/minimist/LICENSE b/node_modules/gulp-sym/node_modules/minimist/LICENSE
new file mode 100644
index 000000000..ee27ba4b4
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/LICENSE
@@ -0,0 +1,18 @@
+This software is released under the MIT license:
+
+Permission is hereby granted, free of charge, to any person obtaining a copy of
+this software and associated documentation files (the "Software"), to deal in
+the Software without restriction, including without limitation the rights to
+use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
+the Software, and to permit persons to whom the Software is furnished to do so,
+subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
+FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
+COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
+IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
+CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/gulp-sym/node_modules/minimist/example/parse.js b/node_modules/gulp-sym/node_modules/minimist/example/parse.js
new file mode 100644
index 000000000..abff3e8ee
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/example/parse.js
@@ -0,0 +1,2 @@
+var argv = require('../')(process.argv.slice(2));
+console.dir(argv);
diff --git a/node_modules/gulp-sym/node_modules/minimist/index.js b/node_modules/gulp-sym/node_modules/minimist/index.js
new file mode 100644
index 000000000..9549c96fb
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/index.js
@@ -0,0 +1,200 @@
+module.exports = function (args, opts) {
+ if (!opts) opts = {};
+
+ var flags = { bools : {}, strings : {} };
+
+ if (typeof opts['boolean'] === 'boolean' && opts['boolean']) {
+ flags.allBools = true;
+ } else {
+ [].concat(opts['boolean']).filter(Boolean).forEach(function (key) {
+ flags.bools[key] = true;
+ });
+ }
+
+ var aliases = {};
+ Object.keys(opts.alias || {}).forEach(function (key) {
+ aliases[key] = [].concat(opts.alias[key]);
+ aliases[key].forEach(function (x) {
+ aliases[x] = [key].concat(aliases[key].filter(function (y) {
+ return x !== y;
+ }));
+ });
+ });
+
+ [].concat(opts.string).filter(Boolean).forEach(function (key) {
+ flags.strings[key] = true;
+ if (aliases[key]) {
+ flags.strings[aliases[key]] = true;
+ }
+ });
+
+ var defaults = opts['default'] || {};
+
+ var argv = { _ : [] };
+ Object.keys(flags.bools).forEach(function (key) {
+ setArg(key, defaults[key] === undefined ? false : defaults[key]);
+ });
+
+ var notFlags = [];
+
+ if (args.indexOf('--') !== -1) {
+ notFlags = args.slice(args.indexOf('--')+1);
+ args = args.slice(0, args.indexOf('--'));
+ }
+
+ function setArg (key, val) {
+ var value = !flags.strings[key] && isNumber(val)
+ ? Number(val) : val
+ ;
+ setKey(argv, key.split('.'), value);
+
+ (aliases[key] || []).forEach(function (x) {
+ setKey(argv, x.split('.'), value);
+ });
+ }
+
+ for (var i = 0; i < args.length; i++) {
+ var arg = args[i];
+
+ if (/^--.+=/.test(arg)) {
+ // Using [\s\S] instead of . because js doesn't support the
+ // 'dotall' regex modifier. See:
+ // http://stackoverflow.com/a/1068308/13216
+ var m = arg.match(/^--([^=]+)=([\s\S]*)$/);
+ setArg(m[1], m[2]);
+ }
+ else if (/^--no-.+/.test(arg)) {
+ var key = arg.match(/^--no-(.+)/)[1];
+ setArg(key, false);
+ }
+ else if (/^--.+/.test(arg)) {
+ var key = arg.match(/^--(.+)/)[1];
+ var next = args[i + 1];
+ if (next !== undefined && !/^-/.test(next)
+ && !flags.bools[key]
+ && !flags.allBools
+ && (aliases[key] ? !flags.bools[aliases[key]] : true)) {
+ setArg(key, next);
+ i++;
+ }
+ else if (/^(true|false)$/.test(next)) {
+ setArg(key, next === 'true');
+ i++;
+ }
+ else {
+ setArg(key, flags.strings[key] ? '' : true);
+ }
+ }
+ else if (/^-[^-]+/.test(arg)) {
+ var letters = arg.slice(1,-1).split('');
+
+ var broken = false;
+ for (var j = 0; j < letters.length; j++) {
+ var next = arg.slice(j+2);
+
+ if (next === '-') {
+ setArg(letters[j], next)
+ continue;
+ }
+
+ if (/[A-Za-z]/.test(letters[j])
+ && /-?\d+(\.\d*)?(e-?\d+)?$/.test(next)) {
+ setArg(letters[j], next);
+ broken = true;
+ break;
+ }
+
+ if (letters[j+1] && letters[j+1].match(/\W/)) {
+ setArg(letters[j], arg.slice(j+2));
+ broken = true;
+ break;
+ }
+ else {
+ setArg(letters[j], flags.strings[letters[j]] ? '' : true);
+ }
+ }
+
+ var key = arg.slice(-1)[0];
+ if (!broken && key !== '-') {
+ if (args[i+1] && !/^(-|--)[^-]/.test(args[i+1])
+ && !flags.bools[key]
+ && (aliases[key] ? !flags.bools[aliases[key]] : true)) {
+ setArg(key, args[i+1]);
+ i++;
+ }
+ else if (args[i+1] && /true|false/.test(args[i+1])) {
+ setArg(key, args[i+1] === 'true');
+ i++;
+ }
+ else {
+ setArg(key, flags.strings[key] ? '' : true);
+ }
+ }
+ }
+ else {
+ argv._.push(
+ flags.strings['_'] || !isNumber(arg) ? arg : Number(arg)
+ );
+ }
+ }
+
+ Object.keys(defaults).forEach(function (key) {
+ if (!hasKey(argv, key.split('.'))) {
+ setKey(argv, key.split('.'), defaults[key]);
+
+ (aliases[key] || []).forEach(function (x) {
+ setKey(argv, x.split('.'), defaults[key]);
+ });
+ }
+ });
+
+ if (opts['--']) {
+ argv['--'] = new Array();
+ notFlags.forEach(function(key) {
+ argv['--'].push(key);
+ });
+ }
+ else {
+ notFlags.forEach(function(key) {
+ argv._.push(key);
+ });
+ }
+
+ return argv;
+};
+
+function hasKey (obj, keys) {
+ var o = obj;
+ keys.slice(0,-1).forEach(function (key) {
+ o = (o[key] || {});
+ });
+
+ var key = keys[keys.length - 1];
+ return key in o;
+}
+
+function setKey (obj, keys, value) {
+ var o = obj;
+ keys.slice(0,-1).forEach(function (key) {
+ if (o[key] === undefined) o[key] = {};
+ o = o[key];
+ });
+
+ var key = keys[keys.length - 1];
+ if (o[key] === undefined || typeof o[key] === 'boolean') {
+ o[key] = value;
+ }
+ else if (Array.isArray(o[key])) {
+ o[key].push(value);
+ }
+ else {
+ o[key] = [ o[key], value ];
+ }
+}
+
+function isNumber (x) {
+ if (typeof x === 'number') return true;
+ if (/^0x[0-9a-f]+$/i.test(x)) return true;
+ return /^[-+]?(?:\d+(?:\.\d*)?|\.\d+)(e[-+]?\d+)?$/.test(x);
+}
+
diff --git a/node_modules/gulp-sym/node_modules/minimist/package.json b/node_modules/gulp-sym/node_modules/minimist/package.json
new file mode 100644
index 000000000..5935fc34a
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/package.json
@@ -0,0 +1,40 @@
+{
+ "name": "minimist",
+ "version": "0.2.0",
+ "description": "parse argument options",
+ "main": "index.js",
+ "devDependencies": {
+ "tape": "~1.0.4",
+ "tap": "~0.4.0"
+ },
+ "scripts": {
+ "test": "tap test/*.js"
+ },
+ "testling" : {
+ "files" : "test/*.js",
+ "browsers" : [
+ "ie/6..latest",
+ "ff/5", "firefox/latest",
+ "chrome/10", "chrome/latest",
+ "safari/5.1", "safari/latest",
+ "opera/12"
+ ]
+ },
+ "repository": {
+ "type": "git",
+ "url": "git://github.com/substack/minimist.git"
+ },
+ "homepage": "https://github.com/substack/minimist",
+ "keywords": [
+ "argv",
+ "getopt",
+ "parser",
+ "optimist"
+ ],
+ "author": {
+ "name": "James Halliday",
+ "email": "mail@substack.net",
+ "url": "http://substack.net"
+ },
+ "license": "MIT"
+}
diff --git a/node_modules/gulp-sym/node_modules/minimist/readme.markdown b/node_modules/gulp-sym/node_modules/minimist/readme.markdown
new file mode 100644
index 000000000..82532210a
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/readme.markdown
@@ -0,0 +1,86 @@
+# minimist
+
+parse argument options
+
+This module is the guts of optimist's argument parser without all the
+fanciful decoration.
+
+[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist)
+
+[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist)
+
+# example
+
+``` js
+var argv = require('minimist')(process.argv.slice(2));
+console.dir(argv);
+```
+
+```
+$ node example/parse.js -a beep -b boop
+{ _: [], a: 'beep', b: 'boop' }
+```
+
+```
+$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz
+{ _: [ 'foo', 'bar', 'baz' ],
+ x: 3,
+ y: 4,
+ n: 5,
+ a: true,
+ b: true,
+ c: true,
+ beep: 'boop' }
+```
+
+# methods
+
+``` js
+var parseArgs = require('minimist')
+```
+
+## var argv = parseArgs(args, opts={})
+
+Return an argument object `argv` populated with the array arguments from `args`.
+
+`argv._` contains all the arguments that didn't have an option associated with
+them.
+
+Numeric-looking arguments will be returned as numbers unless `opts.string` or
+`opts.boolean` is set for that argument name.
+
+Any arguments after `'--'` will not be parsed and will end up in `argv._`.
+
+options can be:
+
+* `opts.string` - a string or array of strings argument names to always treat as
+strings
+* `opts.boolean` - a boolean, string or array of strings to always treat as
+booleans. if `true` will treat all double hyphenated arguments without equal signs
+as boolean (e.g. affects `--foo`, not `-f` or `--foo=bar`)
+* `opts.alias` - an object mapping string names to strings or arrays of string
+argument names to use as aliases
+* `opts.default` - an object mapping string argument names to default values
+* `opts['--']` - when true, populate `argv._` with everything before the `--`
+and `argv['--']` with everything after the `--`. Here's an example:
+
+```
+> require('./')('one two three -- four five --six'.split(' '), { '--': true })
+{ _: [ 'one', 'two', 'three' ],
+ '--': [ 'four', 'five', '--six' ] }
+```
+
+Note that with `opts['--']` set, parsing for arguments still stops after the
+`--`.
+
+# install
+
+With [npm](https://npmjs.org) do:
+
+```
+npm install minimist
+```
+
+# license
+
+MIT
diff --git a/node_modules/gulp-sym/node_modules/minimist/test/all_bool.js b/node_modules/gulp-sym/node_modules/minimist/test/all_bool.js
new file mode 100644
index 000000000..4575ec0b4
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/test/all_bool.js
@@ -0,0 +1,32 @@
+var parse = require('../');
+var test = require('tape');
+
+test('flag boolean true (default all --args to boolean)', function (t) {
+ var argv = parse(['moo', '--honk', 'cow'], {
+ boolean: true
+ });
+
+ t.deepEqual(argv, {
+ honk: true,
+ _: ['moo', 'cow']
+ });
+
+ t.deepEqual(typeof argv.honk, 'boolean');
+ t.end();
+});
+
+test('flag boolean true only affects double hyphen arguments without equals signs', function (t) {
+ var argv = parse(['moo', '--honk', 'cow', '-p', '55', '--tacos=good'], {
+ boolean: true
+ });
+
+ t.deepEqual(argv, {
+ honk: true,
+ tacos: 'good',
+ p: '55',
+ _: ['moo', 'cow']
+ });
+
+ t.deepEqual(typeof argv.honk, 'boolean');
+ t.end();
+});
diff --git a/node_modules/gulp-sym/node_modules/minimist/test/bool.js b/node_modules/gulp-sym/node_modules/minimist/test/bool.js
new file mode 100644
index 000000000..749e083cb
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/test/bool.js
@@ -0,0 +1,119 @@
+var parse = require('../');
+var test = require('tape');
+
+test('flag boolean default false', function (t) {
+ var argv = parse(['moo'], {
+ boolean: ['t', 'verbose'],
+ default: { verbose: false, t: false }
+ });
+
+ t.deepEqual(argv, {
+ verbose: false,
+ t: false,
+ _: ['moo']
+ });
+
+ t.deepEqual(typeof argv.verbose, 'boolean');
+ t.deepEqual(typeof argv.t, 'boolean');
+ t.end();
+
+});
+
+test('boolean groups', function (t) {
+ var argv = parse([ '-x', '-z', 'one', 'two', 'three' ], {
+ boolean: ['x','y','z']
+ });
+
+ t.deepEqual(argv, {
+ x : true,
+ y : false,
+ z : true,
+ _ : [ 'one', 'two', 'three' ]
+ });
+
+ t.deepEqual(typeof argv.x, 'boolean');
+ t.deepEqual(typeof argv.y, 'boolean');
+ t.deepEqual(typeof argv.z, 'boolean');
+ t.end();
+});
+test('boolean and alias with chainable api', function (t) {
+ var aliased = [ '-h', 'derp' ];
+ var regular = [ '--herp', 'derp' ];
+ var opts = {
+ herp: { alias: 'h', boolean: true }
+ };
+ var aliasedArgv = parse(aliased, {
+ boolean: 'herp',
+ alias: { h: 'herp' }
+ });
+ var propertyArgv = parse(regular, {
+ boolean: 'herp',
+ alias: { h: 'herp' }
+ });
+ var expected = {
+ herp: true,
+ h: true,
+ '_': [ 'derp' ]
+ };
+
+ t.same(aliasedArgv, expected);
+ t.same(propertyArgv, expected);
+ t.end();
+});
+
+test('boolean and alias with options hash', function (t) {
+ var aliased = [ '-h', 'derp' ];
+ var regular = [ '--herp', 'derp' ];
+ var opts = {
+ alias: { 'h': 'herp' },
+ boolean: 'herp'
+ };
+ var aliasedArgv = parse(aliased, opts);
+ var propertyArgv = parse(regular, opts);
+ var expected = {
+ herp: true,
+ h: true,
+ '_': [ 'derp' ]
+ };
+ t.same(aliasedArgv, expected);
+ t.same(propertyArgv, expected);
+ t.end();
+});
+
+test('boolean and alias using explicit true', function (t) {
+ var aliased = [ '-h', 'true' ];
+ var regular = [ '--herp', 'true' ];
+ var opts = {
+ alias: { h: 'herp' },
+ boolean: 'h'
+ };
+ var aliasedArgv = parse(aliased, opts);
+ var propertyArgv = parse(regular, opts);
+ var expected = {
+ herp: true,
+ h: true,
+ '_': [ ]
+ };
+
+ t.same(aliasedArgv, expected);
+ t.same(propertyArgv, expected);
+ t.end();
+});
+
+// regression, see https://github.com/substack/node-optimist/issues/71
+test('boolean and --x=true', function(t) {
+ var parsed = parse(['--boool', '--other=true'], {
+ boolean: 'boool'
+ });
+
+ t.same(parsed.boool, true);
+ t.same(parsed.other, 'true');
+
+ parsed = parse(['--boool', '--other=false'], {
+ boolean: 'boool'
+ });
+
+ t.same(parsed.boool, true);
+ t.same(parsed.other, 'false');
+ t.end();
+});
diff --git a/node_modules/gulp-sym/node_modules/minimist/test/dash.js b/node_modules/gulp-sym/node_modules/minimist/test/dash.js
new file mode 100644
index 000000000..5a4fa5be4
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/test/dash.js
@@ -0,0 +1,31 @@
+var parse = require('../');
+var test = require('tape');
+
+test('-', function (t) {
+ t.plan(5);
+ t.deepEqual(parse([ '-n', '-' ]), { n: '-', _: [] });
+ t.deepEqual(parse([ '-' ]), { _: [ '-' ] });
+ t.deepEqual(parse([ '-f-' ]), { f: '-', _: [] });
+ t.deepEqual(
+ parse([ '-b', '-' ], { boolean: 'b' }),
+ { b: true, _: [ '-' ] }
+ );
+ t.deepEqual(
+ parse([ '-s', '-' ], { string: 's' }),
+ { s: '-', _: [] }
+ );
+});
+
+test('-a -- b', function (t) {
+ t.plan(3);
+ t.deepEqual(parse([ '-a', '--', 'b' ]), { a: true, _: [ 'b' ] });
+ t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] });
+ t.deepEqual(parse([ '--a', '--', 'b' ]), { a: true, _: [ 'b' ] });
+});
+
+test('move arguments after the -- into their own `--` array', function(t) {
+ t.plan(1);
+ t.deepEqual(
+ parse([ '--name', 'John', 'before', '--', 'after' ], { '--': true }),
+ { name: 'John', _: [ 'before' ], '--': [ 'after' ] });
+});
diff --git a/node_modules/gulp-sym/node_modules/minimist/test/default_bool.js b/node_modules/gulp-sym/node_modules/minimist/test/default_bool.js
new file mode 100644
index 000000000..f0041ee40
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/test/default_bool.js
@@ -0,0 +1,20 @@
+var test = require('tape');
+var parse = require('../');
+
+test('boolean default true', function (t) {
+ var argv = parse([], {
+ boolean: 'sometrue',
+ default: { sometrue: true }
+ });
+ t.equal(argv.sometrue, true);
+ t.end();
+});
+
+test('boolean default false', function (t) {
+ var argv = parse([], {
+ boolean: 'somefalse',
+ default: { somefalse: false }
+ });
+ t.equal(argv.somefalse, false);
+ t.end();
+});
diff --git a/node_modules/gulp-sym/node_modules/minimist/test/dotted.js b/node_modules/gulp-sym/node_modules/minimist/test/dotted.js
new file mode 100644
index 000000000..d8b3e856e
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/test/dotted.js
@@ -0,0 +1,22 @@
+var parse = require('../');
+var test = require('tape');
+
+test('dotted alias', function (t) {
+ var argv = parse(['--a.b', '22'], {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}});
+ t.equal(argv.a.b, 22);
+ t.equal(argv.aa.bb, 22);
+ t.end();
+});
+
+test('dotted default', function (t) {
+ var argv = parse('', {default: {'a.b': 11}, alias: {'a.b': 'aa.bb'}});
+ t.equal(argv.a.b, 11);
+ t.equal(argv.aa.bb, 11);
+ t.end();
+});
+
+test('dotted default with no alias', function (t) {
+ var argv = parse('', {default: {'a.b': 11}});
+ t.equal(argv.a.b, 11);
+ t.end();
+});
diff --git a/node_modules/gulp-sym/node_modules/minimist/test/long.js b/node_modules/gulp-sym/node_modules/minimist/test/long.js
new file mode 100644
index 000000000..5d3a1e09d
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/test/long.js
@@ -0,0 +1,31 @@
+var test = require('tape');
+var parse = require('../');
+
+test('long opts', function (t) {
+ t.deepEqual(
+ parse([ '--bool' ]),
+ { bool : true, _ : [] },
+ 'long boolean'
+ );
+ t.deepEqual(
+ parse([ '--pow', 'xixxle' ]),
+ { pow : 'xixxle', _ : [] },
+ 'long capture sp'
+ );
+ t.deepEqual(
+ parse([ '--pow=xixxle' ]),
+ { pow : 'xixxle', _ : [] },
+ 'long capture eq'
+ );
+ t.deepEqual(
+ parse([ '--host', 'localhost', '--port', '555' ]),
+ { host : 'localhost', port : 555, _ : [] },
+ 'long captures sp'
+ );
+ t.deepEqual(
+ parse([ '--host=localhost', '--port=555' ]),
+ { host : 'localhost', port : 555, _ : [] },
+ 'long captures eq'
+ );
+ t.end();
+});
diff --git a/node_modules/gulp-sym/node_modules/minimist/test/num.js b/node_modules/gulp-sym/node_modules/minimist/test/num.js
new file mode 100644
index 000000000..2cc77f4d6
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/test/num.js
@@ -0,0 +1,36 @@
+var parse = require('../');
+var test = require('tape');
+
+test('nums', function (t) {
+ var argv = parse([
+ '-x', '1234',
+ '-y', '5.67',
+ '-z', '1e7',
+ '-w', '10f',
+ '--hex', '0xdeadbeef',
+ '789'
+ ]);
+ t.deepEqual(argv, {
+ x : 1234,
+ y : 5.67,
+ z : 1e7,
+ w : '10f',
+ hex : 0xdeadbeef,
+ _ : [ 789 ]
+ });
+ t.deepEqual(typeof argv.x, 'number');
+ t.deepEqual(typeof argv.y, 'number');
+ t.deepEqual(typeof argv.z, 'number');
+ t.deepEqual(typeof argv.w, 'string');
+ t.deepEqual(typeof argv.hex, 'number');
+ t.deepEqual(typeof argv._[0], 'number');
+ t.end();
+});
+
+test('already a number', function (t) {
+ var argv = parse([ '-x', 1234, 789 ]);
+ t.deepEqual(argv, { x : 1234, _ : [ 789 ] });
+ t.deepEqual(typeof argv.x, 'number');
+ t.deepEqual(typeof argv._[0], 'number');
+ t.end();
+});
diff --git a/node_modules/gulp-sym/node_modules/minimist/test/parse.js b/node_modules/gulp-sym/node_modules/minimist/test/parse.js
new file mode 100644
index 000000000..7b4a2a17c
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/test/parse.js
@@ -0,0 +1,197 @@
+var parse = require('../');
+var test = require('tape');
+
+test('parse args', function (t) {
+ t.deepEqual(
+ parse([ '--no-moo' ]),
+ { moo : false, _ : [] },
+ 'no'
+ );
+ t.deepEqual(
+ parse([ '-v', 'a', '-v', 'b', '-v', 'c' ]),
+ { v : ['a','b','c'], _ : [] },
+ 'multi'
+ );
+ t.end();
+});
+
+test('comprehensive', function (t) {
+ t.deepEqual(
+ parse([
+ '--name=meowmers', 'bare', '-cats', 'woo',
+ '-h', 'awesome', '--multi=quux',
+ '--key', 'value',
+ '-b', '--bool', '--no-meep', '--multi=baz',
+ '--', '--not-a-flag', 'eek'
+ ]),
+ {
+ c : true,
+ a : true,
+ t : true,
+ s : 'woo',
+ h : 'awesome',
+ b : true,
+ bool : true,
+ key : 'value',
+ multi : [ 'quux', 'baz' ],
+ meep : false,
+ name : 'meowmers',
+ _ : [ 'bare', '--not-a-flag', 'eek' ]
+ }
+ );
+ t.end();
+});
+
+test('flag boolean', function (t) {
+ var argv = parse([ '-t', 'moo' ], { boolean: 't' });
+ t.deepEqual(argv, { t : true, _ : [ 'moo' ] });
+ t.deepEqual(typeof argv.t, 'boolean');
+ t.end();
+});
+
+test('flag boolean value', function (t) {
+ var argv = parse(['--verbose', 'false', 'moo', '-t', 'true'], {
+ boolean: [ 't', 'verbose' ],
+ default: { verbose: true }
+ });
+
+ t.deepEqual(argv, {
+ verbose: false,
+ t: true,
+ _: ['moo']
+ });
+
+ t.deepEqual(typeof argv.verbose, 'boolean');
+ t.deepEqual(typeof argv.t, 'boolean');
+ t.end();
+});
+
+test('newlines in params' , function (t) {
+ var args = parse([ '-s', "X\nX" ])
+ t.deepEqual(args, { _ : [], s : "X\nX" });
+
+ // reproduce in bash:
+ // VALUE="new
+ // line"
+ // node program.js --s="$VALUE"
+ args = parse([ "--s=X\nX" ])
+ t.deepEqual(args, { _ : [], s : "X\nX" });
+ t.end();
+});
+
+test('strings' , function (t) {
+ var s = parse([ '-s', '0001234' ], { string: 's' }).s;
+ t.equal(s, '0001234');
+ t.equal(typeof s, 'string');
+
+ var x = parse([ '-x', '56' ], { string: 'x' }).x;
+ t.equal(x, '56');
+ t.equal(typeof x, 'string');
+ t.end();
+});
+
+test('stringArgs', function (t) {
+ var s = parse([ ' ', ' ' ], { string: '_' })._;
+ t.same(s.length, 2);
+ t.same(typeof s[0], 'string');
+ t.same(s[0], ' ');
+ t.same(typeof s[1], 'string');
+ t.same(s[1], ' ');
+ t.end();
+});
+
+test('empty strings', function(t) {
+ var s = parse([ '-s' ], { string: 's' }).s;
+ t.equal(s, '');
+ t.equal(typeof s, 'string');
+
+ var str = parse([ '--str' ], { string: 'str' }).str;
+ t.equal(str, '');
+ t.equal(typeof str, 'string');
+
+ var letters = parse([ '-art' ], {
+ string: [ 'a', 't' ]
+ });
+
+ t.equal(letters.a, '');
+ t.equal(letters.r, true);
+ t.equal(letters.t, '');
+
+ t.end();
+});
+
+
+test('string and alias', function(t) {
+ var x = parse([ '--str', '000123' ], {
+ string: 's',
+ alias: { s: 'str' }
+ });
+
+ t.equal(x.str, '000123');
+ t.equal(typeof x.str, 'string');
+ t.equal(x.s, '000123');
+ t.equal(typeof x.s, 'string');
+
+ var y = parse([ '-s', '000123' ], {
+ string: 'str',
+ alias: { str: 's' }
+ });
+
+ t.equal(y.str, '000123');
+ t.equal(typeof y.str, 'string');
+ t.equal(y.s, '000123');
+ t.equal(typeof y.s, 'string');
+ t.end();
+});
+
+test('slashBreak', function (t) {
+ t.same(
+ parse([ '-I/foo/bar/baz' ]),
+ { I : '/foo/bar/baz', _ : [] }
+ );
+ t.same(
+ parse([ '-xyz/foo/bar/baz' ]),
+ { x : true, y : true, z : '/foo/bar/baz', _ : [] }
+ );
+ t.end();
+});
+
+test('alias', function (t) {
+ var argv = parse([ '-f', '11', '--zoom', '55' ], {
+ alias: { z: 'zoom' }
+ });
+ t.equal(argv.zoom, 55);
+ t.equal(argv.z, argv.zoom);
+ t.equal(argv.f, 11);
+ t.end();
+});
+
+test('multiAlias', function (t) {
+ var argv = parse([ '-f', '11', '--zoom', '55' ], {
+ alias: { z: [ 'zm', 'zoom' ] }
+ });
+ t.equal(argv.zoom, 55);
+ t.equal(argv.z, argv.zoom);
+ t.equal(argv.z, argv.zm);
+ t.equal(argv.f, 11);
+ t.end();
+});
+
+test('nested dotted objects', function (t) {
+ var argv = parse([
+ '--foo.bar', '3', '--foo.baz', '4',
+ '--foo.quux.quibble', '5', '--foo.quux.o_O',
+ '--beep.boop'
+ ]);
+
+ t.same(argv.foo, {
+ bar : 3,
+ baz : 4,
+ quux : {
+ quibble : 5,
+ o_O : true
+ }
+ });
+ t.same(argv.beep, { boop : true });
+ t.end();
+});
diff --git a/node_modules/gulp-sym/node_modules/minimist/test/parse_modified.js b/node_modules/gulp-sym/node_modules/minimist/test/parse_modified.js
new file mode 100644
index 000000000..21851b036
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/test/parse_modified.js
@@ -0,0 +1,9 @@
+var parse = require('../');
+var test = require('tape');
+
+test('parse with modifier functions' , function (t) {
+ t.plan(1);
+
+ var argv = parse([ '-b', '123' ], { boolean: 'b' });
+ t.deepEqual(argv, { b: true, _: ['123'] });
+});
diff --git a/node_modules/gulp-sym/node_modules/minimist/test/short.js b/node_modules/gulp-sym/node_modules/minimist/test/short.js
new file mode 100644
index 000000000..d513a1c25
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/test/short.js
@@ -0,0 +1,67 @@
+var parse = require('../');
+var test = require('tape');
+
+test('numeric short args', function (t) {
+ t.plan(2);
+ t.deepEqual(parse([ '-n123' ]), { n: 123, _: [] });
+ t.deepEqual(
+ parse([ '-123', '456' ]),
+ { 1: true, 2: true, 3: 456, _: [] }
+ );
+});
+
+test('short', function (t) {
+ t.deepEqual(
+ parse([ '-b' ]),
+ { b : true, _ : [] },
+ 'short boolean'
+ );
+ t.deepEqual(
+ parse([ 'foo', 'bar', 'baz' ]),
+ { _ : [ 'foo', 'bar', 'baz' ] },
+ 'bare'
+ );
+ t.deepEqual(
+ parse([ '-cats' ]),
+ { c : true, a : true, t : true, s : true, _ : [] },
+ 'group'
+ );
+ t.deepEqual(
+ parse([ '-cats', 'meow' ]),
+ { c : true, a : true, t : true, s : 'meow', _ : [] },
+ 'short group next'
+ );
+ t.deepEqual(
+ parse([ '-h', 'localhost' ]),
+ { h : 'localhost', _ : [] },
+ 'short capture'
+ );
+ t.deepEqual(
+ parse([ '-h', 'localhost', '-p', '555' ]),
+ { h : 'localhost', p : 555, _ : [] },
+ 'short captures'
+ );
+ t.end();
+});
+
+test('mixed short bool and capture', function (t) {
+ t.same(
+ parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]),
+ {
+ f : true, p : 555, h : 'localhost',
+ _ : [ 'script.js' ]
+ }
+ );
+ t.end();
+});
+
+test('short and long', function (t) {
+ t.deepEqual(
+ parse([ '-h', 'localhost', '-fp', '555', 'script.js' ]),
+ {
+ f : true, p : 555, h : 'localhost',
+ _ : [ 'script.js' ]
+ }
+ );
+ t.end();
+});
diff --git a/node_modules/gulp-sym/node_modules/minimist/test/whitespace.js b/node_modules/gulp-sym/node_modules/minimist/test/whitespace.js
new file mode 100644
index 000000000..8a52a58ce
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/minimist/test/whitespace.js
@@ -0,0 +1,8 @@
+var parse = require('../');
+var test = require('tape');
+
+test('whitespace should be whitespace' , function (t) {
+ t.plan(1);
+ var x = parse([ '-x', '\t' ]).x;
+ t.equal(x, '\t');
+});
diff --git a/node_modules/gulp-sym/node_modules/strip-ansi/cli.js b/node_modules/gulp-sym/node_modules/strip-ansi/cli.js
new file mode 100755
index 000000000..602ae00e8
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/strip-ansi/cli.js
@@ -0,0 +1,39 @@
+#!/usr/bin/env node
+'use strict';
+var fs = require('fs');
+var pkg = require('./package.json');
+var strip = require('./');
+var input = process.argv[2];
+
+function help() {
+ console.log([
+ pkg.description,
+ '',
+ 'Usage',
+ ' $ strip-ansi <input-file> > <output-file>',
+ ' $ cat <input-file> | strip-ansi > <output-file>',
+ '',
+ 'Example',
+ ' $ strip-ansi unicorn.txt > unicorn-stripped.txt'
+ ].join('\n'));
+}
+
+if (process.argv.indexOf('--help') !== -1) {
+ help();
+ return;
+}
+
+if (process.argv.indexOf('--version') !== -1) {
+ console.log(pkg.version);
+ return;
+}
+
+if (input) {
+ process.stdout.write(strip(fs.readFileSync(input, 'utf8')));
+ return;
+}
+
+process.stdin.setEncoding('utf8');
+process.stdin.on('data', function (data) {
+ process.stdout.write(strip(data));
+});
diff --git a/node_modules/gulp-sym/node_modules/strip-ansi/index.js b/node_modules/gulp-sym/node_modules/strip-ansi/index.js
new file mode 100644
index 000000000..099480fbf
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/strip-ansi/index.js
@@ -0,0 +1,6 @@
+'use strict';
+var ansiRegex = require('ansi-regex')();
+
+module.exports = function (str) {
+ return typeof str === 'string' ? str.replace(ansiRegex, '') : str;
+};
diff --git a/node_modules/gulp-sym/node_modules/strip-ansi/package.json b/node_modules/gulp-sym/node_modules/strip-ansi/package.json
new file mode 100644
index 000000000..3bacc6706
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/strip-ansi/package.json
@@ -0,0 +1,56 @@
+{
+ "name": "strip-ansi",
+ "version": "0.3.0",
+ "description": "Strip ANSI escape codes",
+ "license": "MIT",
+ "bin": {
+ "strip-ansi": "cli.js"
+ },
+ "repository": "sindresorhus/strip-ansi",
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "http://sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "files": [
+ "index.js",
+ "cli.js"
+ ],
+ "keywords": [
+ "strip",
+ "trim",
+ "remove",
+ "ansi",
+ "styles",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "string",
+ "tty",
+ "escape",
+ "formatting",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "log",
+ "logging",
+ "command-line",
+ "text"
+ ],
+ "dependencies": {
+ "ansi-regex": "^0.2.1"
+ },
+ "devDependencies": {
+ "mocha": "*"
+ }
+}
diff --git a/node_modules/gulp-sym/node_modules/strip-ansi/readme.md b/node_modules/gulp-sym/node_modules/strip-ansi/readme.md
new file mode 100644
index 000000000..5477079d0
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/strip-ansi/readme.md
@@ -0,0 +1,43 @@
+# strip-ansi [![Build Status](https://travis-ci.org/sindresorhus/strip-ansi.svg?branch=master)](https://travis-ci.org/sindresorhus/strip-ansi)
+
+> Strip [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code)
+
+
+## Install
+
+```sh
+$ npm install --save strip-ansi
+```
+
+
+## Usage
+
+```js
+var stripAnsi = require('strip-ansi');
+
+stripAnsi('\x1b[4mcake\x1b[0m');
+//=> 'cake'
+```
+
+
+## CLI
+
+```sh
+$ npm install --global strip-ansi
+```
+
+```sh
+$ strip-ansi --help
+
+Usage
+ $ strip-ansi <input-file> > <output-file>
+ $ cat <input-file> | strip-ansi > <output-file>
+
+Example
+ $ strip-ansi unicorn.txt > unicorn-stripped.txt
+```
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/gulp-sym/node_modules/supports-color/cli.js b/node_modules/gulp-sym/node_modules/supports-color/cli.js
new file mode 100755
index 000000000..0617971e6
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/supports-color/cli.js
@@ -0,0 +1,28 @@
+#!/usr/bin/env node
+'use strict';
+var pkg = require('./package.json');
+var supportsColor = require('./');
+var input = process.argv[2];
+
+function help() {
+ console.log([
+ pkg.description,
+ '',
+ 'Usage',
+ ' $ supports-color',
+ '',
+ 'Exits with code 0 if color is supported and 1 if not'
+ ].join('\n'));
+}
+
+if (!input || process.argv.indexOf('--help') !== -1) {
+ help();
+ return;
+}
+
+if (process.argv.indexOf('--version') !== -1) {
+ console.log(pkg.version);
+ return;
+}
+
+process.exit(supportsColor ? 0 : 1);
diff --git a/node_modules/gulp-sym/node_modules/supports-color/index.js b/node_modules/gulp-sym/node_modules/supports-color/index.js
new file mode 100644
index 000000000..092d0baef
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/supports-color/index.js
@@ -0,0 +1,32 @@
+'use strict';
+module.exports = (function () {
+ if (process.argv.indexOf('--no-color') !== -1) {
+ return false;
+ }
+
+ if (process.argv.indexOf('--color') !== -1) {
+ return true;
+ }
+
+ if (process.stdout && !process.stdout.isTTY) {
+ return false;
+ }
+
+ if (process.platform === 'win32') {
+ return true;
+ }
+
+ if ('COLORTERM' in process.env) {
+ return true;
+ }
+
+ if (process.env.TERM === 'dumb') {
+ return false;
+ }
+
+ if (/^screen|^xterm|^vt100|color|ansi|cygwin|linux/i.test(process.env.TERM)) {
+ return true;
+ }
+
+ return false;
+})();
diff --git a/node_modules/gulp-sym/node_modules/supports-color/package.json b/node_modules/gulp-sym/node_modules/supports-color/package.json
new file mode 100644
index 000000000..02b019789
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/supports-color/package.json
@@ -0,0 +1,50 @@
+{
+ "name": "supports-color",
+ "version": "0.2.0",
+ "description": "Detect whether a terminal supports color",
+ "license": "MIT",
+ "repository": "sindresorhus/supports-color",
+ "bin": {
+ "supports-color": "cli.js"
+ },
+ "author": {
+ "name": "Sindre Sorhus",
+ "email": "sindresorhus@gmail.com",
+ "url": "http://sindresorhus.com"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ },
+ "scripts": {
+ "test": "mocha"
+ },
+ "files": [
+ "index.js",
+ "cli.js"
+ ],
+ "keywords": [
+ "cli",
+ "bin",
+ "color",
+ "colour",
+ "colors",
+ "terminal",
+ "console",
+ "cli",
+ "ansi",
+ "styles",
+ "tty",
+ "rgb",
+ "256",
+ "shell",
+ "xterm",
+ "command-line",
+ "support",
+ "supports",
+ "capability",
+ "detect"
+ ],
+ "devDependencies": {
+ "mocha": "*"
+ }
+}
diff --git a/node_modules/gulp-sym/node_modules/supports-color/readme.md b/node_modules/gulp-sym/node_modules/supports-color/readme.md
new file mode 100644
index 000000000..7f07e5fb0
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/supports-color/readme.md
@@ -0,0 +1,44 @@
+# supports-color [![Build Status](https://travis-ci.org/sindresorhus/supports-color.svg?branch=master)](https://travis-ci.org/sindresorhus/supports-color)
+
+> Detect whether a terminal supports color
+
+
+## Install
+
+```sh
+$ npm install --save supports-color
+```
+
+
+## Usage
+
+```js
+var supportsColor = require('supports-color');
+
+if (supportsColor) {
+ console.log('Terminal supports color');
+}
+```
+
+It obeys the `--color` and `--no-color` CLI flags.
+
+
+## CLI
+
+```sh
+$ npm install --global supports-color
+```
+
+```sh
+$ supports-color --help
+
+Usage
+ $ supports-color
+
+# Exits with code 0 if color is supported and 1 if not
+```
+
+
+## License
+
+MIT © [Sindre Sorhus](http://sindresorhus.com)
diff --git a/node_modules/gulp-sym/node_modules/vinyl/.npmignore b/node_modules/gulp-sym/node_modules/vinyl/.npmignore
new file mode 100644
index 000000000..b5ef13a3c
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/.npmignore
@@ -0,0 +1,6 @@
+.DS_Store
+*.log
+node_modules
+build
+*.node
+components \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/vinyl/.travis.yml b/node_modules/gulp-sym/node_modules/vinyl/.travis.yml
new file mode 100644
index 000000000..33ad9f8c8
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/.travis.yml
@@ -0,0 +1,6 @@
+language: node_js
+node_js:
+ - "0.9"
+ - "0.10"
+after_script:
+ - npm run coveralls \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/vinyl/LICENSE b/node_modules/gulp-sym/node_modules/vinyl/LICENSE
new file mode 100755
index 000000000..4f482f9ba
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/LICENSE
@@ -0,0 +1,20 @@
+Copyright (c) 2013 Fractal <contact@wearefractal.com>
+
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of this software and associated documentation files (the
+"Software"), to deal in the Software without restriction, including
+without limitation the rights to use, copy, modify, merge, publish,
+distribute, sublicense, and/or sell copies of the Software, and to
+permit persons to whom the Software is furnished to do so, subject to
+the following conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
+LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
diff --git a/node_modules/gulp-sym/node_modules/vinyl/README.md b/node_modules/gulp-sym/node_modules/vinyl/README.md
new file mode 100644
index 000000000..3f97efc56
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/README.md
@@ -0,0 +1,123 @@
+# vinyl [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Dependency Status](https://david-dm.org/wearefractal/vinyl.png?theme=shields.io)](https://david-dm.org/wearefractal/vinyl)
+
+
+## Information
+
+<table>
+<tr>
+<td>Package</td><td>vinyl</td>
+</tr>
+<tr>
+<td>Description</td>
+<td>A virtual file format</td>
+</tr>
+<tr>
+<td>Node Version</td>
+<td>>= 0.9</td>
+</tr>
+</table>
+
+## File
+
+```javascript
+var File = require('vinyl');
+
+var coffeeFile = new File({
+ cwd: "/",
+ base: "/test/",
+ path: "/test/file.coffee"
+ contents: new Buffer("test = 123")
+});
+```
+
+### constructor(options)
+
+#### options.cwd
+
+Type: `String`
+Default: `process.cwd()`
+
+#### options.base
+
+Used for relative pathing. Typically where a glob starts.
+
+Type: `String`
+Default: `options.cwd`
+
+#### options.path
+
+Full path to the file.
+
+Type: `String`
+Default: `null`
+
+#### options.stat
+
+The result of an fs.stat call. See [fs.Stats](http://nodejs.org/api/fs.html#fs_class_fs_stats) for more information.
+
+Type: `fs.Stats`
+Default: `null`
+
+#### options.contents
+
+File contents.
+
+Type: `Buffer, Stream, or null`
+Default: `null`
+
+### isBuffer()
+
+Returns true if file.contents is a Buffer.
+
+### isStream()
+
+Returns true if file.contents is a Stream.
+
+### isNull()
+
+Returns true if file.contents is null.
+
+### clone()
+
+Returns a new File object with all attributes cloned.
+
+### pipe(stream[, opt])
+
+If file.contents is a Buffer, it will write it to the stream.
+
+If file.contents is a Stream, it will pipe it to the stream.
+
+If file.contents is null, it will do nothing.
+
+If opt.end is true, the destination stream will not be ended (same as node core).
+
+Returns the stream.
+
+### inspect()
+
+Returns a pretty String interpretation of the File. Useful for console.log.
+
+### relative
+
+Returns path.relative for the file base and file path.
+
+Example:
+
+```javascript
+var file = new File({
+ cwd: "/",
+ base: "/test/",
+ path: "/test/file.coffee"
+});
+
+console.log(file.relative); // file.coffee
+```
+
+[npm-url]: https://npmjs.org/package/vinyl
+[npm-image]: https://badge.fury.io/js/vinyl.png
+[travis-url]: https://travis-ci.org/wearefractal/vinyl
+[travis-image]: https://travis-ci.org/wearefractal/vinyl.png?branch=master
+[coveralls-url]: https://coveralls.io/r/wearefractal/vinyl
+[coveralls-image]: https://coveralls.io/repos/wearefractal/vinyl/badge.png
+[depstat-url]: https://david-dm.org/wearefractal/vinyl
+[depstat-image]: https://david-dm.org/wearefractal/vinyl.png \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/vinyl/index.js b/node_modules/gulp-sym/node_modules/vinyl/index.js
new file mode 100644
index 000000000..97f5c7529
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/index.js
@@ -0,0 +1,128 @@
+var path = require('path');
+
+var cloneStats = require('clone-stats');
+
+var isBuffer = require('./lib/isBuffer');
+var isStream = require('./lib/isStream');
+var isNull = require('./lib/isNull');
+var inspectStream = require('./lib/inspectStream');
+var cloneBuffer = require('./lib/cloneBuffer');
+
+function File(file) {
+ if (!file) file = {};
+
+ // TODO: should this be moved to vinyl-fs?
+ this.cwd = file.cwd || process.cwd();
+ this.base = file.base || this.cwd;
+
+ this.path = file.path || null;
+
+ // stat = fs stats object
+ // TODO: should this be moved to vinyl-fs?
+ this.stat = file.stat || null;
+
+ // contents = stream, buffer, or null if not read
+ this.contents = file.contents || null;
+}
+
+File.prototype.isBuffer = function() {
+ return isBuffer(this.contents);
+};
+
+File.prototype.isStream = function() {
+ return isStream(this.contents);
+};
+
+File.prototype.isNull = function() {
+ return isNull(this.contents);
+};
+
+// TODO: should this be moved to vinyl-fs?
+File.prototype.isDirectory = function() {
+ return this.isNull() && this.stat && this.stat.isDirectory();
+};
+
+File.prototype.clone = function() {
+ var clonedContents = this.isBuffer() ? cloneBuffer(this.contents) : this.contents;
+ var clonedStat = this.stat ? cloneStats(this.stat) : null;
+
+ return new File({
+ cwd: this.cwd,
+ base: this.base,
+ path: this.path,
+ stat: clonedStat,
+ contents: clonedContents
+ });
+};
+
+File.prototype.pipe = function(stream, opt) {
+ if (!opt) opt = {};
+ if (typeof opt.end === 'undefined') opt.end = true;
+
+ if (this.isStream()) {
+ return this.contents.pipe(stream, opt);
+ }
+ if (this.isBuffer()) {
+ if (opt.end) {
+ stream.end(this.contents);
+ } else {
+ stream.write(this.contents);
+ }
+ return stream;
+ }
+ if (this.isNull()) {
+ if (opt.end) stream.end();
+ return stream;
+ }
+
+ return stream;
+};
+
+File.prototype.inspect = function() {
+ var inspect = [];
+
+ // use relative path if possible
+ var filePath = (this.base && this.path) ? this.relative : this.path;
+
+ if (filePath) {
+ inspect.push('"'+filePath+'"');
+ }
+
+ if (this.isBuffer()) {
+ inspect.push(this.contents.inspect());
+ }
+
+ if (this.isStream()) {
+ inspect.push(inspectStream(this.contents));
+ }
+
+ return '<File '+inspect.join(' ')+'>';
+};
+
+// virtual attributes
+// or stuff with extra logic
+Object.defineProperty(File.prototype, 'contents', {
+ get: function() {
+ return this._contents;
+ },
+ set: function(val) {
+ if (!isBuffer(val) && !isStream(val) && !isNull(val)) {
+ throw new Error("File.contents can only be a Buffer, a Stream, or null.");
+ }
+ this._contents = val;
+ }
+});
+
+// TODO: should this be moved to vinyl-fs?
+Object.defineProperty(File.prototype, 'relative', {
+ get: function() {
+ if (!this.base) throw new Error('No base specified! Can not get relative.');
+ if (!this.path) throw new Error('No path specified! Can not get relative.');
+ return path.relative(this.base, this.path);
+ },
+ set: function() {
+ throw new Error('File.relative is generated from the base and path attributes. Do not modify it.');
+ }
+});
+
+module.exports = File;
diff --git a/node_modules/gulp-sym/node_modules/vinyl/lib/cloneBuffer.js b/node_modules/gulp-sym/node_modules/vinyl/lib/cloneBuffer.js
new file mode 100644
index 000000000..3a861f22f
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/lib/cloneBuffer.js
@@ -0,0 +1,7 @@
+var Buffer = require('buffer').Buffer;
+
+module.exports = function(buf) {
+ var out = new Buffer(buf.length);
+ buf.copy(out);
+ return out;
+}; \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/vinyl/lib/inspectStream.js b/node_modules/gulp-sym/node_modules/vinyl/lib/inspectStream.js
new file mode 100644
index 000000000..2c9067892
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/lib/inspectStream.js
@@ -0,0 +1,12 @@
+var Stream = require('stream').Stream;
+var isStream = require('./isStream');
+
+module.exports = function(stream) {
+ if (!isStream(stream)) return;
+
+ var streamType = stream.constructor.name;
+ // avoid StreamStream
+ if (streamType === 'Stream') streamType = '';
+
+ return '<'+streamType+'Stream>';
+}; \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/vinyl/lib/isBuffer.js b/node_modules/gulp-sym/node_modules/vinyl/lib/isBuffer.js
new file mode 100644
index 000000000..0e23782c4
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/lib/isBuffer.js
@@ -0,0 +1,7 @@
+var buf = require('buffer');
+var Buffer = buf.Buffer;
+
+// could use Buffer.isBuffer but this is the same exact thing...
+module.exports = function(o) {
+ return typeof o === 'object' && o instanceof Buffer;
+}; \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/vinyl/lib/isNull.js b/node_modules/gulp-sym/node_modules/vinyl/lib/isNull.js
new file mode 100644
index 000000000..403bb30e8
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/lib/isNull.js
@@ -0,0 +1,3 @@
+module.exports = function(v) {
+ return v === null;
+}; \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/vinyl/lib/isStream.js b/node_modules/gulp-sym/node_modules/vinyl/lib/isStream.js
new file mode 100644
index 000000000..9ce0929b0
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/lib/isStream.js
@@ -0,0 +1,5 @@
+var Stream = require('stream').Stream;
+
+module.exports = function(o) {
+ return !!o && o instanceof Stream;
+}; \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/vinyl/package.json b/node_modules/gulp-sym/node_modules/vinyl/package.json
new file mode 100644
index 000000000..d851cb138
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "vinyl",
+ "description": "A virtual file format",
+ "version": "0.2.3",
+ "homepage": "http://github.com/wearefractal/vinyl",
+ "repository": "git://github.com/wearefractal/vinyl.git",
+ "author": "Fractal <contact@wearefractal.com> (http://wearefractal.com/)",
+ "main": "./index.js",
+ "dependencies": {
+ "clone-stats": "~0.0.1"
+ },
+ "devDependencies": {
+ "mocha": "~1.17.0",
+ "should": "~2.1.1",
+ "mocha-lcov-reporter": "0.0.1",
+ "coveralls": "~2.6.1",
+ "istanbul": "~0.2.3",
+ "rimraf": "~2.2.5",
+ "jshint": "~2.4.1",
+ "buffer-equal": "0.0.0",
+ "lodash.templatesettings": "~2.4.1",
+ "event-stream": "~3.1.0"
+ },
+ "scripts": {
+ "test": "mocha --reporter spec && jshint",
+ "coveralls": "istanbul cover _mocha --report lcovonly -- -R spec && cat ./coverage/lcov.info | coveralls && rm -rf ./coverage"
+ },
+ "engines": {
+ "node": ">= 0.9"
+ },
+ "licenses": [
+ {
+ "type": "MIT",
+ "url": "http://github.com/wearefractal/vinyl/raw/master/LICENSE"
+ }
+ ]
+}
diff --git a/node_modules/gulp-sym/node_modules/vinyl/test/File.js b/node_modules/gulp-sym/node_modules/vinyl/test/File.js
new file mode 100644
index 000000000..1f2a83a0c
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/test/File.js
@@ -0,0 +1,540 @@
+var File = require('../');
+var Stream = require('stream');
+var fs = require('fs');
+
+var should = require('should');
+require('mocha');
+
+describe('File', function() {
+
+ describe('constructor()', function() {
+ it('should default cwd to process.cwd', function(done) {
+ var file = new File();
+ file.cwd.should.equal(process.cwd());
+ done();
+ });
+
+ it('should default base to cwd', function(done) {
+ var cwd = "/";
+ var file = new File({cwd: cwd});
+ file.base.should.equal(cwd);
+ done();
+ });
+
+ it('should default base to cwd even when none is given', function(done) {
+ var file = new File();
+ file.base.should.equal(process.cwd());
+ done();
+ });
+
+ it('should default path to null', function(done) {
+ var file = new File();
+ should.not.exist(file.path);
+ done();
+ });
+
+ it('should default stat to null', function(done) {
+ var file = new File();
+ should.not.exist(file.stat);
+ done();
+ });
+
+ it('should default contents to null', function(done) {
+ var file = new File();
+ should.not.exist(file.contents);
+ done();
+ });
+
+ it('should set base to given value', function(done) {
+ var val = "/";
+ var file = new File({base: val});
+ file.base.should.equal(val);
+ done();
+ });
+
+ it('should set cwd to given value', function(done) {
+ var val = "/";
+ var file = new File({cwd: val});
+ file.cwd.should.equal(val);
+ done();
+ });
+
+ it('should set path to given value', function(done) {
+ var val = "/test.coffee";
+ var file = new File({path: val});
+ file.path.should.equal(val);
+ done();
+ });
+
+ it('should set stat to given value', function(done) {
+ var val = {};
+ var file = new File({stat: val});
+ file.stat.should.equal(val);
+ done();
+ });
+
+ it('should set contents to given value', function(done) {
+ var val = new Buffer("test");
+ var file = new File({contents: val});
+ file.contents.should.equal(val);
+ done();
+ });
+ });
+
+ describe('isBuffer()', function() {
+ it('should return true when the contents are a Buffer', function(done) {
+ var val = new Buffer("test");
+ var file = new File({contents: val});
+ file.isBuffer().should.equal(true);
+ done();
+ });
+
+ it('should return false when the contents are a Stream', function(done) {
+ var val = new Stream();
+ var file = new File({contents: val});
+ file.isBuffer().should.equal(false);
+ done();
+ });
+
+ it('should return false when the contents are a null', function(done) {
+ var file = new File({contents: null});
+ file.isBuffer().should.equal(false);
+ done();
+ });
+ });
+
+ describe('isStream()', function() {
+ it('should return false when the contents are a Buffer', function(done) {
+ var val = new Buffer("test");
+ var file = new File({contents: val});
+ file.isStream().should.equal(false);
+ done();
+ });
+
+ it('should return true when the contents are a Stream', function(done) {
+ var val = new Stream();
+ var file = new File({contents: val});
+ file.isStream().should.equal(true);
+ done();
+ });
+
+ it('should return false when the contents are a null', function(done) {
+ var file = new File({contents: null});
+ file.isStream().should.equal(false);
+ done();
+ });
+ });
+
+ describe('isNull()', function() {
+ it('should return false when the contents are a Buffer', function(done) {
+ var val = new Buffer("test");
+ var file = new File({contents: val});
+ file.isNull().should.equal(false);
+ done();
+ });
+
+ it('should return false when the contents are a Stream', function(done) {
+ var val = new Stream();
+ var file = new File({contents: val});
+ file.isNull().should.equal(false);
+ done();
+ });
+
+ it('should return true when the contents are a null', function(done) {
+ var file = new File({contents: null});
+ file.isNull().should.equal(true);
+ done();
+ });
+ });
+
+ describe('isDirectory()', function() {
+ var fakeStat = {
+ isDirectory: function() {
+ return true;
+ }
+ };
+
+ it('should return false when the contents are a Buffer', function(done) {
+ var val = new Buffer("test");
+ var file = new File({contents: val, stat: fakeStat});
+ file.isDirectory().should.equal(false);
+ done();
+ });
+
+ it('should return false when the contents are a Stream', function(done) {
+ var val = new Stream();
+ var file = new File({contents: val, stat: fakeStat});
+ file.isDirectory().should.equal(false);
+ done();
+ });
+
+ it('should return true when the contents are a null', function(done) {
+ var file = new File({contents: null, stat: fakeStat});
+ file.isDirectory().should.equal(true);
+ done();
+ });
+ });
+
+ describe('clone()', function() {
+ it('should copy all attributes over with Buffer', function(done) {
+ var options = {
+ cwd: "/",
+ base: "/test/",
+ path: "/test/test.coffee",
+ contents: new Buffer("test")
+ };
+ var file = new File(options);
+ var file2 = file.clone();
+
+ file2.should.not.equal(file, 'refs should be different');
+ file2.cwd.should.equal(file.cwd);
+ file2.base.should.equal(file.base);
+ file2.path.should.equal(file.path);
+ file2.contents.should.not.equal(file.contents, 'buffer ref should be different');
+ file2.contents.toString('utf8').should.equal(file.contents.toString('utf8'));
+ done();
+ });
+
+ it('should copy all attributes over with Stream', function(done) {
+ var options = {
+ cwd: "/",
+ base: "/test/",
+ path: "/test/test.coffee",
+ contents: new Stream()
+ };
+ var file = new File(options);
+ var file2 = file.clone();
+
+ file2.should.not.equal(file, 'refs should be different');
+ file2.cwd.should.equal(file.cwd);
+ file2.base.should.equal(file.base);
+ file2.path.should.equal(file.path);
+ file2.contents.should.equal(file.contents, 'stream ref should be the same');
+ done();
+ });
+
+ it('should copy all attributes over with null', function(done) {
+ var options = {
+ cwd: "/",
+ base: "/test/",
+ path: "/test/test.coffee",
+ contents: null
+ };
+ var file = new File(options);
+ var file2 = file.clone();
+
+ file2.should.not.equal(file, 'refs should be different');
+ file2.cwd.should.equal(file.cwd);
+ file2.base.should.equal(file.base);
+ file2.path.should.equal(file.path);
+ should.not.exist(file2.contents);
+ done();
+ });
+
+ it('should properly clone the `stat` property', function(done) {
+ var options = {
+ cwd: "/",
+ base: "/test/",
+ path: "/test/test.js",
+ contents: new Buffer("test"),
+ stat: fs.statSync(__filename)
+ };
+
+ var file = new File(options);
+ var copy = file.clone();
+
+ copy.stat.isFile().should.be.true;
+ copy.stat.isDirectory().should.be.false;
+ should(file.stat instanceof fs.Stats).be.true;
+ should(copy.stat instanceof fs.Stats).be.true;
+
+ done();
+ });
+ });
+
+ describe('pipe()', function() {
+ it('should write to stream with Buffer', function(done) {
+ var options = {
+ cwd: "/",
+ base: "/test/",
+ path: "/test/test.coffee",
+ contents: new Buffer("test")
+ };
+ var file = new File(options);
+ var stream = new Stream.PassThrough();
+ stream.on('data', function(chunk) {
+ should.exist(chunk);
+ (chunk instanceof Buffer).should.equal(true, 'should write as a buffer');
+ chunk.toString('utf8').should.equal(options.contents.toString('utf8'));
+ });
+ stream.on('end', function(chunk) {
+ done();
+ });
+ var ret = file.pipe(stream);
+ ret.should.equal(stream, 'should return the stream');
+ });
+
+ it('should pipe to stream with Stream', function(done) {
+ var testChunk = new Buffer("test");
+ var options = {
+ cwd: "/",
+ base: "/test/",
+ path: "/test/test.coffee",
+ contents: new Stream.PassThrough()
+ };
+ var file = new File(options);
+ var stream = new Stream.PassThrough();
+ stream.on('data', function(chunk) {
+ should.exist(chunk);
+ (chunk instanceof Buffer).should.equal(true, 'should write as a buffer');
+ chunk.toString('utf8').should.equal(testChunk.toString('utf8'));
+ done();
+ });
+ var ret = file.pipe(stream);
+ ret.should.equal(stream, 'should return the stream');
+
+ file.contents.write(testChunk);
+ });
+
+ it('should do nothing with null', function(done) {
+ var options = {
+ cwd: "/",
+ base: "/test/",
+ path: "/test/test.coffee",
+ contents: null
+ };
+ var file = new File(options);
+ var stream = new Stream.PassThrough();
+ stream.on('data', function(chunk) {
+ throw new Error("should not write");
+ });
+ stream.on('end', function() {
+ done();
+ });
+ var ret = file.pipe(stream);
+ ret.should.equal(stream, 'should return the stream');
+ });
+
+ it('should write to stream with Buffer', function(done) {
+ var options = {
+ cwd: "/",
+ base: "/test/",
+ path: "/test/test.coffee",
+ contents: new Buffer("test")
+ };
+ var file = new File(options);
+ var stream = new Stream.PassThrough();
+ stream.on('data', function(chunk) {
+ should.exist(chunk);
+ (chunk instanceof Buffer).should.equal(true, 'should write as a buffer');
+ chunk.toString('utf8').should.equal(options.contents.toString('utf8'));
+ done();
+ });
+ stream.on('end', function(chunk) {
+ throw new Error("should not end");
+ });
+ var ret = file.pipe(stream, {end: false});
+ ret.should.equal(stream, 'should return the stream');
+ });
+
+ it('should pipe to stream with Stream', function(done) {
+ var testChunk = new Buffer("test");
+ var options = {
+ cwd: "/",
+ base: "/test/",
+ path: "/test/test.coffee",
+ contents: new Stream.PassThrough()
+ };
+ var file = new File(options);
+ var stream = new Stream.PassThrough();
+ stream.on('data', function(chunk) {
+ should.exist(chunk);
+ (chunk instanceof Buffer).should.equal(true, 'should write as a buffer');
+ chunk.toString('utf8').should.equal(testChunk.toString('utf8'));
+ done();
+ });
+ stream.on('end', function(chunk) {
+ throw new Error("should not end");
+ });
+ var ret = file.pipe(stream, {end: false});
+ ret.should.equal(stream, 'should return the stream');
+
+ file.contents.write(testChunk);
+ });
+
+ it('should do nothing with null', function(done) {
+ var options = {
+ cwd: "/",
+ base: "/test/",
+ path: "/test/test.coffee",
+ contents: null
+ };
+ var file = new File(options);
+ var stream = new Stream.PassThrough();
+ stream.on('data', function(chunk) {
+ throw new Error("should not write");
+ });
+ stream.on('end', function(chunk) {
+ throw new Error("should not end");
+ });
+ var ret = file.pipe(stream, {end: false});
+ ret.should.equal(stream, 'should return the stream');
+ process.nextTick(done);
+ });
+ });
+
+ describe('inspect()', function() {
+ it('should return correct format when no contents and no path', function(done) {
+ var file = new File();
+ file.inspect().should.equal('<File >');
+ done();
+ });
+
+ it('should return correct format when Buffer and no path', function(done) {
+ var val = new Buffer("test");
+ var file = new File({
+ contents: val
+ });
+ file.inspect().should.equal('<File <Buffer 74 65 73 74>>');
+ done();
+ });
+
+ it('should return correct format when Buffer and relative path', function(done) {
+ var val = new Buffer("test");
+ var file = new File({
+ cwd: "/",
+ base: "/test/",
+ path: "/test/test.coffee",
+ contents: val
+ });
+ file.inspect().should.equal('<File "test.coffee" <Buffer 74 65 73 74>>');
+ done();
+ });
+
+ it('should return correct format when Buffer and only path and no base', function(done) {
+ var val = new Buffer("test");
+ var file = new File({
+ cwd: "/",
+ path: "/test/test.coffee",
+ contents: val
+ });
+ delete file.base;
+ file.inspect().should.equal('<File "/test/test.coffee" <Buffer 74 65 73 74>>');
+ done();
+ });
+
+ it('should return correct format when Stream and relative path', function(done) {
+ var file = new File({
+ cwd: "/",
+ base: "/test/",
+ path: "/test/test.coffee",
+ contents: new Stream.PassThrough()
+ });
+ file.inspect().should.equal('<File "test.coffee" <PassThroughStream>>');
+ done();
+ });
+
+ it('should return correct format when null and relative path', function(done) {
+ var file = new File({
+ cwd: "/",
+ base: "/test/",
+ path: "/test/test.coffee",
+ contents: null
+ });
+ file.inspect().should.equal('<File "test.coffee">');
+ done();
+ });
+ });
+
+ describe('contents get/set', function() {
+ it('should work with Buffer', function(done) {
+ var val = new Buffer("test");
+ var file = new File();
+ file.contents = val;
+ file.contents.should.equal(val);
+ done();
+ });
+
+ it('should work with Stream', function(done) {
+ var val = new Stream.PassThrough();
+ var file = new File();
+ file.contents = val;
+ file.contents.should.equal(val);
+ done();
+ });
+
+ it('should work with null', function(done) {
+ var val = null;
+ var file = new File();
+ file.contents = val;
+ (file.contents === null).should.equal(true);
+ done();
+ });
+
+ it('should not work with string', function(done) {
+ var val = "test";
+ var file = new File();
+ try {
+ file.contents = val;
+ } catch (err) {
+ should.exist(err);
+ done();
+ }
+ });
+ });
+
+ describe('relative get/set', function() {
+ it('should error on set', function(done) {
+ var file = new File();
+ try {
+ file.relative = "test";
+ } catch (err) {
+ should.exist(err);
+ done();
+ }
+ });
+
+ it('should error on get when no base', function(done) {
+ var a;
+ var file = new File();
+ delete file.base;
+ try {
+ a = file.relative;
+ } catch (err) {
+ should.exist(err);
+ done();
+ }
+ });
+
+ it('should error on get when no path', function(done) {
+ var a;
+ var file = new File();
+ try {
+ a = file.relative;
+ } catch (err) {
+ should.exist(err);
+ done();
+ }
+ });
+
+ it('should return a relative path from base', function(done) {
+ var file = new File({
+ cwd: "/",
+ base: "/test/",
+ path: "/test/test.coffee"
+ });
+ file.relative.should.equal("test.coffee");
+ done();
+ });
+
+ it('should return a relative path from cwd', function(done) {
+ var file = new File({
+ cwd: "/",
+ path: "/test/test.coffee"
+ });
+ file.relative.should.equal("test/test.coffee");
+ done();
+ });
+ });
+
+});
diff --git a/node_modules/gulp-sym/node_modules/vinyl/test/cloneBuffer.js b/node_modules/gulp-sym/node_modules/vinyl/test/cloneBuffer.js
new file mode 100644
index 000000000..7d2868141
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/test/cloneBuffer.js
@@ -0,0 +1,28 @@
+var cloneBuffer = require('../lib/cloneBuffer');
+var Stream = require('stream');
+var should = require('should');
+require('mocha');
+
+describe('cloneBuffer()', function() {
+ it('should return a new Buffer reference', function(done) {
+ var testBuffer = new Buffer('test');
+ var testBuffer2 = cloneBuffer(testBuffer);
+
+ should.exist(testBuffer2, 'should return something');
+ (testBuffer2 instanceof Buffer).should.equal(true, 'should return a Buffer');
+ testBuffer2.should.not.equal(testBuffer, 'pointer should change');
+ done();
+ });
+
+ it('should not replicate modifications to the original buffer', function(done) {
+ var testBuffer = new Buffer('test');
+ var testBuffer2 = cloneBuffer(testBuffer);
+
+ // test that changes dont modify both pointers
+ testBuffer2.write('w');
+
+ testBuffer.toString('utf8').should.equal('test', 'original should stay the same');
+ testBuffer2.toString('utf8').should.equal('west', 'new buffer should be modified');
+ done();
+ });
+}); \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/vinyl/test/inspectStream.js b/node_modules/gulp-sym/node_modules/vinyl/test/inspectStream.js
new file mode 100644
index 000000000..fe1802c5d
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/test/inspectStream.js
@@ -0,0 +1,53 @@
+var inspectStream = require('../lib/inspectStream');
+var Stream = require('stream');
+var should = require('should');
+require('mocha');
+
+describe('inspectStream()', function() {
+ it('should work on a core Stream', function(done) {
+ var testStream = new Stream();
+ inspectStream(testStream).should.equal('<Stream>');
+ done();
+ });
+
+ it('should work on a core Readable Stream', function(done) {
+ var testStream = new Stream.Readable();
+ inspectStream(testStream).should.equal('<ReadableStream>');
+ done();
+ });
+
+ it('should work on a core Writable Stream', function(done) {
+ var testStream = new Stream.Writable();
+ inspectStream(testStream).should.equal('<WritableStream>');
+ done();
+ });
+
+ it('should work on a core Duplex Stream', function(done) {
+ var testStream = new Stream.Duplex();
+ inspectStream(testStream).should.equal('<DuplexStream>');
+ done();
+ });
+
+ it('should work on a core Transform Stream', function(done) {
+ var testStream = new Stream.Transform();
+ inspectStream(testStream).should.equal('<TransformStream>');
+ done();
+ });
+
+ it('should work on a core PassThrough Stream', function(done) {
+ var testStream = new Stream.PassThrough();
+ inspectStream(testStream).should.equal('<PassThroughStream>');
+ done();
+ });
+
+ it('should not work on a Buffer', function(done) {
+ var testBuffer = new Buffer('test');
+ should.not.exist(inspectStream(testBuffer));
+ done();
+ });
+
+ it('should not work on a null', function(done) {
+ should.not.exist(inspectStream(null));
+ done();
+ });
+}); \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/vinyl/test/isBuffer.js b/node_modules/gulp-sym/node_modules/vinyl/test/isBuffer.js
new file mode 100644
index 000000000..5bb1cb91d
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/test/isBuffer.js
@@ -0,0 +1,29 @@
+var isBuffer = require('../lib/isBuffer');
+var Stream = require('stream');
+var should = require('should');
+require('mocha');
+
+describe('isBuffer()', function() {
+ it('should return true on a Buffer', function(done) {
+ var testBuffer = new Buffer('test');
+ isBuffer(testBuffer).should.equal(true);
+ done();
+ });
+
+ it('should return false on a Stream', function(done) {
+ var testStream = new Stream();
+ isBuffer(testStream).should.equal(false);
+ done();
+ });
+
+ it('should return false on a null', function(done) {
+ isBuffer(null).should.equal(false);
+ done();
+ });
+
+ it('should return false on a array of numbers', function(done) {
+ var testArray = [1, 2, 3];
+ isBuffer(testArray).should.equal(false);
+ done();
+ });
+}); \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/vinyl/test/isNull.js b/node_modules/gulp-sym/node_modules/vinyl/test/isNull.js
new file mode 100644
index 000000000..db70c0135
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/test/isNull.js
@@ -0,0 +1,23 @@
+var isNull = require('../lib/isNull');
+var Stream = require('stream');
+var should = require('should');
+require('mocha');
+
+describe('isNull()', function() {
+ it('should return true on null', function(done) {
+ isNull(null).should.equal(true);
+ done();
+ });
+
+ it('should return false on undefined', function(done) {
+ isNull().should.equal(false);
+ isNull(undefined).should.equal(false);
+ done();
+ });
+
+ it('should return false on defined values', function(done) {
+ isNull(1).should.equal(false);
+ isNull("test").should.equal(false);
+ done();
+ });
+}); \ No newline at end of file
diff --git a/node_modules/gulp-sym/node_modules/vinyl/test/isStream.js b/node_modules/gulp-sym/node_modules/vinyl/test/isStream.js
new file mode 100644
index 000000000..f22584c51
--- /dev/null
+++ b/node_modules/gulp-sym/node_modules/vinyl/test/isStream.js
@@ -0,0 +1,29 @@
+var isStream = require('../lib/isStream');
+var Stream = require('stream');
+var should = require('should');
+require('mocha');
+
+describe('isStream()', function() {
+ it('should return true on a Stream', function(done) {
+ var testStream = new Stream();
+ isStream(testStream).should.equal(true);
+ done();
+ });
+
+ it('should return false on a Buffer', function(done) {
+ var testBuffer = new Buffer('test');
+ isStream(testBuffer).should.equal(false);
+ done();
+ });
+
+ it('should return false on a null', function(done) {
+ isStream(null).should.equal(false);
+ done();
+ });
+
+ it('should return false on a array of numbers', function(done) {
+ var testArray = [1, 2, 3];
+ isStream(testArray).should.equal(false);
+ done();
+ });
+}); \ No newline at end of file