From a71eb79001bbf1d58dd8985f6e988d2b231c54c3 Mon Sep 17 00:00:00 2001 From: Roman Timashev Date: Sat, 15 Mar 2014 14:42:39 +0400 Subject: [PATCH] + gulp-autoprefixer node module; = package.json gulp-autoprifixer field; --- node_modules/gulp-autoprefixer/.npmignore | 1 + node_modules/gulp-autoprefixer/LICENSE | 20 + node_modules/gulp-autoprefixer/README.md | 21 + node_modules/gulp-autoprefixer/index.js | 58 ++ .../node_modules/.bin/autoprefixer | 1 + .../node_modules/autoprefixer/ChangeLog.md | 276 ++++++ .../node_modules/autoprefixer/LICENSE | 20 + .../node_modules/autoprefixer/README.md | 474 +++++++++ .../autoprefixer/bin/autoprefixer | 13 + .../autoprefixer/data/browsers.js | 50 + .../autoprefixer/data/prefixes.js | 311 ++++++ .../autoprefixer/lib/autoprefixer.js | 117 +++ .../node_modules/autoprefixer/lib/binary.js | 326 ++++++ .../node_modules/autoprefixer/lib/browsers.js | 190 ++++ .../autoprefixer/lib/declaration.js | 81 ++ .../autoprefixer/lib/hacks/align-content.js | 57 ++ .../autoprefixer/lib/hacks/align-items.js | 57 ++ .../autoprefixer/lib/hacks/align-self.js | 55 ++ .../autoprefixer/lib/hacks/border-image.js | 28 + .../autoprefixer/lib/hacks/border-radius.js | 56 ++ .../autoprefixer/lib/hacks/display-flex.js | 70 ++ .../autoprefixer/lib/hacks/fill-available.js | 41 + .../autoprefixer/lib/hacks/filter.js | 29 + .../autoprefixer/lib/hacks/flex-basis.js | 51 + .../autoprefixer/lib/hacks/flex-direction.js | 65 ++ .../autoprefixer/lib/hacks/flex-flow.js | 35 + .../autoprefixer/lib/hacks/flex-grow.js | 41 + .../autoprefixer/lib/hacks/flex-shrink.js | 51 + .../autoprefixer/lib/hacks/flex-spec.js | 11 + .../autoprefixer/lib/hacks/flex-wrap.js | 33 + .../autoprefixer/lib/hacks/flex.js | 50 + .../autoprefixer/lib/hacks/fullscreen.js | 33 + .../autoprefixer/lib/hacks/gradient.js | 213 ++++ .../autoprefixer/lib/hacks/justify-content.js | 62 ++ .../autoprefixer/lib/hacks/order.js | 52 + .../autoprefixer/lib/hacks/placeholder.js | 35 + .../autoprefixer/lib/hacks/transform.js | 31 + .../autoprefixer/lib/hacks/transition.js | 37 + .../node_modules/autoprefixer/lib/info.js | 114 +++ .../autoprefixer/lib/keyframes.js | 40 + .../autoprefixer/lib/old-value.js | 29 + .../node_modules/autoprefixer/lib/prefixer.js | 84 ++ .../node_modules/autoprefixer/lib/prefixes.js | 315 ++++++ .../autoprefixer/lib/processor.js | 105 ++ .../node_modules/autoprefixer/lib/selector.js | 75 ++ .../node_modules/autoprefixer/lib/updater.js | 225 +++++ .../node_modules/autoprefixer/lib/utils.js | 41 + .../node_modules/autoprefixer/lib/value.js | 97 ++ .../node_modules/fs-extra/.npmignore | 2 + .../node_modules/fs-extra/CHANGELOG.md | 112 +++ .../node_modules/fs-extra/LICENSE | 16 + .../node_modules/fs-extra/README.md | 332 +++++++ .../node_modules/fs-extra/lib/copy.js | 79 ++ .../node_modules/fs-extra/lib/create.js | 55 ++ .../node_modules/fs-extra/lib/index.js | 110 +++ .../node_modules/fs-extra/lib/json.js | 30 + .../node_modules/fs-extra/lib/mkdir.js | 8 + .../node_modules/fs-extra/lib/output.js | 37 + .../node_modules/fs-extra/lib/remove.js | 19 + .../fs-extra/node_modules/.bin/ncp | 1 + .../fs-extra/node_modules/.bin/rimraf | 1 + .../fs-extra/node_modules/jsonfile/.npmignore | 2 + .../node_modules/jsonfile/CHANGELOG.md | 20 + .../fs-extra/node_modules/jsonfile/LICENSE | 15 + .../fs-extra/node_modules/jsonfile/README.md | 121 +++ .../node_modules/jsonfile/lib/jsonfile.js | 47 + .../node_modules/jsonfile/package.json | 42 + .../fs-extra/node_modules/mkdirp/.npmignore | 2 + .../fs-extra/node_modules/mkdirp/.travis.yml | 5 + .../fs-extra/node_modules/mkdirp/LICENSE | 21 + .../node_modules/mkdirp/examples/pow.js | 6 + .../fs-extra/node_modules/mkdirp/index.js | 82 ++ .../fs-extra/node_modules/mkdirp/package.json | 34 + .../node_modules/mkdirp/readme.markdown | 63 ++ .../node_modules/mkdirp/test/chmod.js | 38 + .../node_modules/mkdirp/test/clobber.js | 37 + .../node_modules/mkdirp/test/mkdirp.js | 28 + .../fs-extra/node_modules/mkdirp/test/perm.js | 32 + .../node_modules/mkdirp/test/perm_sync.js | 39 + .../fs-extra/node_modules/mkdirp/test/race.js | 41 + .../fs-extra/node_modules/mkdirp/test/rel.js | 32 + .../node_modules/mkdirp/test/return.js | 25 + .../node_modules/mkdirp/test/return_sync.js | 24 + .../fs-extra/node_modules/mkdirp/test/root.js | 18 + .../fs-extra/node_modules/mkdirp/test/sync.js | 32 + .../node_modules/mkdirp/test/umask.js | 28 + .../node_modules/mkdirp/test/umask_sync.js | 32 + .../fs-extra/node_modules/ncp/.npmignore | 4 + .../fs-extra/node_modules/ncp/.travis.yml | 7 + .../fs-extra/node_modules/ncp/LICENSE.md | 21 + .../fs-extra/node_modules/ncp/README.md | 52 + .../fs-extra/node_modules/ncp/bin/ncp | 48 + .../fs-extra/node_modules/ncp/lib/ncp.js | 222 +++++ .../fs-extra/node_modules/ncp/package.json | 41 + .../node_modules/ncp/test/fixtures/src/a | 1 + .../node_modules/ncp/test/fixtures/src/b | 1 + .../node_modules/ncp/test/fixtures/src/c | 0 .../node_modules/ncp/test/fixtures/src/d | 0 .../node_modules/ncp/test/fixtures/src/e | 0 .../node_modules/ncp/test/fixtures/src/f | 0 .../node_modules/ncp/test/fixtures/src/sub/a | 1 + .../node_modules/ncp/test/fixtures/src/sub/b | 0 .../node_modules/ncp/test/ncp-test.js | 86 ++ .../fs-extra/node_modules/rimraf/AUTHORS | 6 + .../fs-extra/node_modules/rimraf/LICENSE | 23 + .../fs-extra/node_modules/rimraf/README.md | 30 + .../fs-extra/node_modules/rimraf/bin.js | 33 + .../fs-extra/node_modules/rimraf/package.json | 56 ++ .../fs-extra/node_modules/rimraf/rimraf.js | 178 ++++ .../fs-extra/node_modules/rimraf/test/run.sh | 10 + .../node_modules/rimraf/test/setup.sh | 47 + .../node_modules/rimraf/test/test-async.js | 5 + .../node_modules/rimraf/test/test-sync.js | 3 + .../node_modules/fs-extra/package.json | 64 ++ .../node_modules/postcss/ChangeLog.md | 12 + .../autoprefixer/node_modules/postcss/LICENSE | 20 + .../node_modules/postcss/README.md | 571 +++++++++++ .../node_modules/postcss/lib/at-rule.js | 72 ++ .../node_modules/postcss/lib/container.js | 243 +++++ .../node_modules/postcss/lib/declaration.js | 55 ++ .../node_modules/postcss/lib/generate-map.js | 65 ++ .../node_modules/postcss/lib/list.js | 64 ++ .../node_modules/postcss/lib/node.js | 126 +++ .../node_modules/postcss/lib/parse.js | 422 ++++++++ .../node_modules/postcss/lib/postcss.js | 78 ++ .../node_modules/postcss/lib/raw.js | 38 + .../node_modules/postcss/lib/result.js | 20 + .../node_modules/postcss/lib/root.js | 38 + .../node_modules/postcss/lib/rule.js | 32 + .../node_modules/postcss/lib/syntax-error.js | 27 + .../node_modules/postcss/lib/vendor.js | 27 + .../node_modules/source-map/.npmignore | 2 + .../node_modules/source-map/.travis.yml | 4 + .../node_modules/source-map/CHANGELOG.md | 130 +++ .../postcss/node_modules/source-map/LICENSE | 28 + .../source-map/Makefile.dryice.js | 166 ++++ .../postcss/node_modules/source-map/README.md | 446 +++++++++ .../source-map/build/assert-shim.js | 56 ++ .../source-map/build/mini-require.js | 152 +++ .../source-map/build/prefix-source-map.jsm | 20 + .../source-map/build/prefix-utils.jsm | 18 + .../source-map/build/suffix-browser.js | 8 + .../source-map/build/suffix-source-map.jsm | 6 + .../source-map/build/suffix-utils.jsm | 21 + .../source-map/build/test-prefix.js | 8 + .../source-map/build/test-suffix.js | 3 + .../node_modules/source-map/lib/source-map.js | 8 + .../source-map/lib/source-map/array-set.js | 97 ++ .../source-map/lib/source-map/base64-vlq.js | 144 +++ .../source-map/lib/source-map/base64.js | 42 + .../lib/source-map/binary-search.js | 81 ++ .../lib/source-map/source-map-consumer.js | 478 +++++++++ .../lib/source-map/source-map-generator.js | 397 ++++++++ .../source-map/lib/source-map/source-node.js | 387 ++++++++ .../source-map/lib/source-map/util.js | 302 ++++++ .../source-map/node_modules/amdefine/LICENSE | 58 ++ .../node_modules/amdefine/README.md | 171 ++++ .../node_modules/amdefine/amdefine.js | 299 ++++++ .../node_modules/amdefine/intercept.js | 36 + .../node_modules/amdefine/package.json | 36 + .../node_modules/source-map/package.json | 126 +++ .../node_modules/source-map/test/run-tests.js | 62 ++ .../source-map/test/source-map/test-api.js | 26 + .../test/source-map/test-array-set.js | 104 ++ .../test/source-map/test-base64-vlq.js | 24 + .../source-map/test/source-map/test-base64.js | 35 + .../test/source-map/test-binary-search.js | 54 + .../test/source-map/test-dog-fooding.js | 84 ++ .../source-map/test-source-map-consumer.js | 475 +++++++++ .../source-map/test-source-map-generator.js | 540 ++++++++++ .../test/source-map/test-source-node.js | 439 +++++++++ .../source-map/test/source-map/test-util.js | 127 +++ .../source-map/test/source-map/util.js | 161 +++ .../node_modules/postcss/package.json | 40 + .../node_modules/autoprefixer/package.json | 47 + .../autoprefixer/updaters/browsers.js | 69 ++ .../autoprefixer/updaters/prefixes.js | 238 +++++ .../node_modules/bufferstreams/.npmignore | 5 + .../node_modules/bufferstreams/.travis.yml | 9 + .../node_modules/bufferstreams/LICENCE | 21 + .../node_modules/bufferstreams/README.md | 42 + .../node_modules/bufferstreams/package.json | 45 + .../node_modules/bufferstreams/src/index.js | 45 + .../bufferstreams/tests/index.mocha.js | 111 +++ .../node_modules/gulp-util/.npmignore | 6 + .../node_modules/gulp-util/.travis.yml | 6 + .../node_modules/gulp-util/LICENSE | 20 + .../node_modules/gulp-util/README.md | 166 ++++ .../node_modules/gulp-util/index.js | 18 + .../node_modules/gulp-util/lib/File.js | 1 + .../node_modules/gulp-util/lib/PluginError.js | 65 ++ .../node_modules/gulp-util/lib/beep.js | 3 + .../node_modules/gulp-util/lib/buffer.js | 15 + .../node_modules/gulp-util/lib/colors.js | 1 + .../node_modules/gulp-util/lib/combine.js | 11 + .../node_modules/gulp-util/lib/date.js | 1 + .../node_modules/gulp-util/lib/env.js | 4 + .../node_modules/gulp-util/lib/isBuffer.js | 7 + .../node_modules/gulp-util/lib/isNull.js | 3 + .../node_modules/gulp-util/lib/isStream.js | 5 + .../node_modules/gulp-util/lib/linefeed.js | 1 + .../node_modules/gulp-util/lib/log.js | 9 + .../node_modules/gulp-util/lib/noop.js | 5 + .../gulp-util/lib/replaceExtension.js | 9 + .../node_modules/gulp-util/lib/template.js | 19 + .../gulp-util/node_modules/chalk/index.js | 63 ++ .../chalk/node_modules/.bin/strip-ansi | 1 + .../node_modules/ansi-styles/ansi-styles.js | 38 + .../node_modules/ansi-styles/package.json | 58 ++ .../chalk/node_modules/ansi-styles/readme.md | 65 ++ .../chalk/node_modules/has-color/has-color.js | 24 + .../chalk/node_modules/has-color/package.json | 55 ++ .../chalk/node_modules/has-color/readme.md | 28 + .../chalk/node_modules/strip-ansi/cli.js | 27 + .../chalk/node_modules/strip-ansi/index.js | 4 + .../node_modules/strip-ansi/package.json | 64 ++ .../chalk/node_modules/strip-ansi/readme.md | 46 + .../gulp-util/node_modules/chalk/package.json | 61 ++ .../gulp-util/node_modules/chalk/readme.md | 158 +++ .../gulp-util/node_modules/dateformat/LICENSE | 20 + .../node_modules/dateformat/Readme.md | 79 ++ .../node_modules/dateformat/lib/dateformat.js | 183 ++++ .../node_modules/dateformat/package.json | 40 + .../node_modules/dateformat/test/basic.js | 45 + .../dateformat/test/test_dayofweek.js | 10 + .../dateformat/test/test_weekofyear.js | 4 + .../dateformat/test/test_weekofyear.sh | 27 + .../lodash._reinterpolate/LICENSE.txt | 22 + .../lodash._reinterpolate/README.md | 15 + .../lodash._reinterpolate/index.js | 13 + .../lodash._reinterpolate/package.json | 45 + .../node_modules/lodash.template/LICENSE.txt | 22 + .../node_modules/lodash.template/README.md | 15 + .../node_modules/lodash.template/index.js | 216 ++++ .../lodash._escapestringchar/LICENSE.txt | 22 + .../lodash._escapestringchar/README.md | 15 + .../lodash._escapestringchar/index.js | 33 + .../lodash._escapestringchar/package.json | 45 + .../node_modules/lodash.defaults/LICENSE.txt | 22 + .../node_modules/lodash.defaults/README.md | 15 + .../node_modules/lodash.defaults/index.js | 54 + .../lodash._objecttypes/LICENSE.txt | 22 + .../lodash._objecttypes/README.md | 15 + .../node_modules/lodash._objecttypes/index.js | 20 + .../lodash._objecttypes/package.json | 45 + .../node_modules/lodash.defaults/package.json | 56 ++ .../node_modules/lodash.escape/LICENSE.txt | 22 + .../node_modules/lodash.escape/README.md | 15 + .../node_modules/lodash.escape/index.js | 31 + .../lodash._escapehtmlchar/LICENSE.txt | 22 + .../lodash._escapehtmlchar/README.md | 15 + .../lodash._escapehtmlchar/index.js | 22 + .../lodash._htmlescapes/LICENSE.txt | 22 + .../lodash._htmlescapes/README.md | 15 + .../node_modules/lodash._htmlescapes/index.js | 26 + .../lodash._htmlescapes/package.json | 45 + .../lodash._escapehtmlchar/package.json | 48 + .../lodash._reunescapedhtml/LICENSE.txt | 22 + .../lodash._reunescapedhtml/README.md | 15 + .../lodash._reunescapedhtml/index.js | 15 + .../lodash._htmlescapes/LICENSE.txt | 22 + .../lodash._htmlescapes/README.md | 15 + .../node_modules/lodash._htmlescapes/index.js | 26 + .../lodash._htmlescapes/package.json | 45 + .../lodash._reunescapedhtml/package.json | 49 + .../node_modules/lodash.escape/package.json | 57 ++ .../node_modules/lodash.keys/LICENSE.txt | 22 + .../node_modules/lodash.keys/README.md | 15 + .../node_modules/lodash.keys/index.js | 36 + .../node_modules/lodash._isnative/LICENSE.txt | 22 + .../node_modules/lodash._isnative/README.md | 15 + .../node_modules/lodash._isnative/index.js | 34 + .../lodash._isnative/package.json | 45 + .../node_modules/lodash._shimkeys/LICENSE.txt | 22 + .../node_modules/lodash._shimkeys/README.md | 15 + .../node_modules/lodash._shimkeys/index.js | 38 + .../lodash._objecttypes/LICENSE.txt | 22 + .../lodash._objecttypes/README.md | 15 + .../node_modules/lodash._objecttypes/index.js | 20 + .../lodash._objecttypes/package.json | 46 + .../lodash._shimkeys/package.json | 48 + .../node_modules/lodash.isobject/LICENSE.txt | 22 + .../node_modules/lodash.isobject/README.md | 15 + .../node_modules/lodash.isobject/index.js | 39 + .../lodash._objecttypes/LICENSE.txt | 22 + .../lodash._objecttypes/README.md | 15 + .../node_modules/lodash._objecttypes/index.js | 20 + .../lodash._objecttypes/package.json | 46 + .../node_modules/lodash.isobject/package.json | 55 ++ .../node_modules/lodash.keys/package.json | 57 ++ .../lodash.templatesettings/LICENSE.txt | 22 + .../lodash.templatesettings/README.md | 15 + .../lodash.templatesettings/index.js | 73 ++ .../lodash.templatesettings/package.json | 56 ++ .../node_modules/lodash.values/LICENSE.txt | 22 + .../node_modules/lodash.values/README.md | 15 + .../node_modules/lodash.values/index.js | 36 + .../node_modules/lodash.values/package.json | 55 ++ .../node_modules/lodash.template/package.json | 61 ++ .../node_modules/minimist/.travis.yml | 4 + .../gulp-util/node_modules/minimist/LICENSE | 18 + .../node_modules/minimist/example/parse.js | 2 + .../gulp-util/node_modules/minimist/index.js | 187 ++++ .../node_modules/minimist/package.json | 50 + .../node_modules/minimist/readme.markdown | 73 ++ .../node_modules/minimist/test/dash.js | 24 + .../minimist/test/default_bool.js | 20 + .../node_modules/minimist/test/dotted.js | 16 + .../node_modules/minimist/test/long.js | 31 + .../node_modules/minimist/test/parse.js | 318 ++++++ .../minimist/test/parse_modified.js | 9 + .../node_modules/minimist/test/short.js | 67 ++ .../node_modules/minimist/test/whitespace.js | 8 + .../node_modules/multipipe/.npmignore | 1 + .../node_modules/multipipe/.travis.yml | 3 + .../node_modules/multipipe/History.md | 15 + .../gulp-util/node_modules/multipipe/Makefile | 10 + .../node_modules/multipipe/Readme.md | 74 ++ .../gulp-util/node_modules/multipipe/index.js | 57 ++ .../node_modules/duplexer2/.npmignore | 1 + .../node_modules/duplexer2/.travis.yml | 3 + .../node_modules/duplexer2/LICENSE.md | 26 + .../node_modules/duplexer2/README.md | 129 +++ .../node_modules/duplexer2/example.js | 49 + .../multipipe/node_modules/duplexer2/index.js | 62 ++ .../node_modules/duplexer2/package.json | 37 + .../node_modules/duplexer2/test/tests.js | 161 +++ .../node_modules/multipipe/package.json | 26 + .../node_modules/multipipe/test/multipipe.js | 108 ++ .../gulp-util/node_modules/through2/.jshintrc | 59 ++ .../node_modules/through2/.npmignore | 1 + .../node_modules/through2/.travis.yml | 17 + .../gulp-util/node_modules/through2/LICENSE | 39 + .../gulp-util/node_modules/through2/README.md | 131 +++ .../node_modules/readable-stream/.npmignore | 5 + .../node_modules/readable-stream/LICENSE | 27 + .../node_modules/readable-stream/README.md | 15 + .../node_modules/readable-stream/duplex.js | 1 + .../readable-stream/lib/_stream_duplex.js | 69 ++ .../lib/_stream_passthrough.js | 41 + .../readable-stream/lib/_stream_readable.js | 928 ++++++++++++++++++ .../readable-stream/lib/_stream_transform.js | 205 ++++ .../readable-stream/lib/_stream_writable.js | 378 +++++++ .../node_modules/string_decoder/.npmignore | 2 + .../node_modules/string_decoder/LICENSE | 20 + .../node_modules/string_decoder/README.md | 7 + .../node_modules/string_decoder/index.js | 200 ++++ .../node_modules/string_decoder/package.json | 32 + .../node_modules/readable-stream/package.json | 42 + .../readable-stream/passthrough.js | 1 + .../node_modules/readable-stream/readable.js | 6 + .../node_modules/readable-stream/transform.js | 1 + .../node_modules/readable-stream/writable.js | 1 + .../through2/node_modules/xtend/.npmignore | 1 + .../through2/node_modules/xtend/LICENCE | 19 + .../through2/node_modules/xtend/Makefile | 4 + .../through2/node_modules/xtend/README.md | 27 + .../through2/node_modules/xtend/has-keys.js | 7 + .../through2/node_modules/xtend/index.js | 25 + .../through2/node_modules/xtend/mutable.js | 25 + .../xtend/node_modules/object-keys/.npmignore | 1 + .../node_modules/object-keys/.travis.yml | 5 + .../xtend/node_modules/object-keys/README.md | 39 + .../xtend/node_modules/object-keys/foreach.js | 40 + .../xtend/node_modules/object-keys/index.js | 2 + .../node_modules/object-keys/isArguments.js | 16 + .../node_modules/object-keys/package.json | 56 ++ .../xtend/node_modules/object-keys/shim.js | 62 ++ .../node_modules/object-keys/test/foreach.js | 156 +++ .../node_modules/object-keys/test/index.js | 6 + .../object-keys/test/isArguments.js | 10 + .../node_modules/object-keys/test/shim.js | 134 +++ .../through2/node_modules/xtend/package.json | 72 ++ .../through2/node_modules/xtend/test.js | 63 ++ .../node_modules/through2/package.json | 44 + .../node_modules/through2/test/basic-test.js | 334 +++++++ .../node_modules/through2/test/bench.js | 42 + .../node_modules/through2/test/sauce.js | 38 + .../node_modules/through2/test/test.js | 9 + .../node_modules/through2/through2.js | 78 ++ .../gulp-util/node_modules/vinyl/.npmignore | 6 + .../gulp-util/node_modules/vinyl/.travis.yml | 6 + .../gulp-util/node_modules/vinyl/LICENSE | 20 + .../gulp-util/node_modules/vinyl/README.md | 123 +++ .../gulp-util/node_modules/vinyl/index.js | 128 +++ .../node_modules/vinyl/lib/cloneBuffer.js | 7 + .../node_modules/vinyl/lib/inspectStream.js | 12 + .../node_modules/vinyl/lib/isBuffer.js | 7 + .../node_modules/vinyl/lib/isNull.js | 3 + .../node_modules/vinyl/lib/isStream.js | 5 + .../vinyl/node_modules/clone-stats/LICENSE.md | 21 + .../vinyl/node_modules/clone-stats/README.md | 17 + .../vinyl/node_modules/clone-stats/index.js | 13 + .../node_modules/clone-stats/package.json | 39 + .../vinyl/node_modules/clone-stats/test.js | 36 + .../gulp-util/node_modules/vinyl/package.json | 51 + .../gulp-util/node_modules/vinyl/test/File.js | 540 ++++++++++ .../node_modules/vinyl/test/cloneBuffer.js | 28 + .../node_modules/vinyl/test/inspectStream.js | 53 + .../node_modules/vinyl/test/isBuffer.js | 29 + .../node_modules/vinyl/test/isNull.js | 23 + .../node_modules/vinyl/test/isStream.js | 29 + .../node_modules/gulp-util/package.json | 58 ++ .../node_modules/gulp-util/test/File.js | 46 + .../gulp-util/test/PluginError.js | 70 ++ .../node_modules/gulp-util/test/beep.js | 23 + .../node_modules/gulp-util/test/buffer.js | 36 + .../node_modules/gulp-util/test/colors.js | 11 + .../node_modules/gulp-util/test/combine.js | 38 + .../node_modules/gulp-util/test/date.js | 17 + .../node_modules/gulp-util/test/env.js | 12 + .../node_modules/gulp-util/test/isBuffer.js | 16 + .../node_modules/gulp-util/test/isNull.js | 20 + .../node_modules/gulp-util/test/isStream.js | 16 + .../node_modules/gulp-util/test/linefeed.js | 5 + .../node_modules/gulp-util/test/log.js | 23 + .../node_modules/gulp-util/test/noop.js | 24 + .../gulp-util/test/replaceExtension.js | 34 + .../node_modules/gulp-util/test/template.js | 99 ++ node_modules/gulp-autoprefixer/package.json | 39 + node_modules/gulp-autoprefixer/test/test.css | 3 + node_modules/gulp-autoprefixer/test/test.js | 106 ++ package.json | 3 +- 423 files changed, 26150 insertions(+), 1 deletion(-) create mode 100644 node_modules/gulp-autoprefixer/.npmignore create mode 100644 node_modules/gulp-autoprefixer/LICENSE create mode 100644 node_modules/gulp-autoprefixer/README.md create mode 100644 node_modules/gulp-autoprefixer/index.js create mode 120000 node_modules/gulp-autoprefixer/node_modules/.bin/autoprefixer create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/ChangeLog.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/README.md create mode 100755 node_modules/gulp-autoprefixer/node_modules/autoprefixer/bin/autoprefixer create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/data/browsers.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/data/prefixes.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/autoprefixer.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/binary.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/browsers.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/declaration.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-content.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-items.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-self.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/border-image.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/border-radius.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/display-flex.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/fill-available.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/filter.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-basis.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-direction.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-flow.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-grow.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-shrink.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-spec.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-wrap.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/fullscreen.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/gradient.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/justify-content.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/order.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/placeholder.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/transform.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/transition.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/info.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/keyframes.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/old-value.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/prefixer.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/prefixes.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/processor.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/selector.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/updater.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/utils.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/value.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/.npmignore create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/CHANGELOG.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/copy.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/create.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/json.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/mkdir.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/output.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/remove.js create mode 120000 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/.bin/ncp create mode 120000 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/.bin/rimraf create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/.npmignore create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/CHANGELOG.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/lib/jsonfile.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/.npmignore create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/.travis.yml create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/examples/pow.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/readme.markdown create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/chmod.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/clobber.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/mkdirp.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/perm.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/perm_sync.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/race.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/rel.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/return.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/return_sync.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/root.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/sync.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/umask.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/umask_sync.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/.npmignore create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/.travis.yml create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/LICENSE.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/README.md create mode 100755 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/bin/ncp create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/lib/ncp.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/a create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/b create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/c create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/d create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/e create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/f create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/sub/a create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/sub/b create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/ncp-test.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/AUTHORS create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/README.md create mode 100755 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/bin.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/rimraf.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/run.sh create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/setup.sh create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/test-async.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/test-sync.js create mode 100755 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/ChangeLog.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/at-rule.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/container.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/declaration.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/generate-map.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/list.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/node.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/parse.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/postcss.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/raw.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/result.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/root.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/rule.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/syntax-error.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/vendor.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/.npmignore create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/.travis.yml create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/CHANGELOG.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/Makefile.dryice.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/assert-shim.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/mini-require.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/prefix-source-map.jsm create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/prefix-utils.jsm create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-browser.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-source-map.jsm create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-utils.jsm create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/test-prefix.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/test-suffix.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/array-set.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/base64-vlq.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/base64.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/binary-search.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-consumer.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-generator.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-node.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/util.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/amdefine.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/intercept.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/package.json create mode 100755 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/run-tests.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-api.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-array-set.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-base64-vlq.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-base64.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-binary-search.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-dog-fooding.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-consumer.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-generator.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-node.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-util.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/util.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/updaters/browsers.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/autoprefixer/updaters/prefixes.js create mode 100755 node_modules/gulp-autoprefixer/node_modules/bufferstreams/.npmignore create mode 100755 node_modules/gulp-autoprefixer/node_modules/bufferstreams/.travis.yml create mode 100755 node_modules/gulp-autoprefixer/node_modules/bufferstreams/LICENCE create mode 100755 node_modules/gulp-autoprefixer/node_modules/bufferstreams/README.md create mode 100755 node_modules/gulp-autoprefixer/node_modules/bufferstreams/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/bufferstreams/src/index.js create mode 100755 node_modules/gulp-autoprefixer/node_modules/bufferstreams/tests/index.mocha.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/.npmignore create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/.travis.yml create mode 100755 node_modules/gulp-autoprefixer/node_modules/gulp-util/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/File.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/PluginError.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/beep.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/buffer.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/colors.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/combine.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/date.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/env.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/isBuffer.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/isNull.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/isStream.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/linefeed.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/log.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/noop.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/replaceExtension.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/template.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/index.js create mode 120000 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md create mode 100755 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/readme.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/Readme.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/basic.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/.travis.yml create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/example/parse.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/readme.markdown create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/dash.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/default_bool.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/dotted.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/long.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/parse.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/short.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/whitespace.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/.npmignore create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/.travis.yml create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/History.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/Makefile create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/Readme.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md create mode 100755 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.jshintrc create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.npmignore create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.travis.yml create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/basic-test.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/bench.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/sauce.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/test.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/through2.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/.npmignore create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/.travis.yml create mode 100755 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/LICENSE create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/File.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isNull.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isStream.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/package.json create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/File.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/PluginError.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/beep.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/buffer.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/colors.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/combine.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/date.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/env.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isBuffer.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isNull.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isStream.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/linefeed.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/log.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/noop.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/replaceExtension.js create mode 100644 node_modules/gulp-autoprefixer/node_modules/gulp-util/test/template.js create mode 100644 node_modules/gulp-autoprefixer/package.json create mode 100644 node_modules/gulp-autoprefixer/test/test.css create mode 100644 node_modules/gulp-autoprefixer/test/test.js diff --git a/node_modules/gulp-autoprefixer/.npmignore b/node_modules/gulp-autoprefixer/.npmignore new file mode 100644 index 00000000..40b878db --- /dev/null +++ b/node_modules/gulp-autoprefixer/.npmignore @@ -0,0 +1 @@ +node_modules/ \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/LICENSE b/node_modules/gulp-autoprefixer/LICENSE new file mode 100644 index 00000000..9b0f1756 --- /dev/null +++ b/node_modules/gulp-autoprefixer/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright (c) 2013 Michael Ostermann metrime@icloud.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. \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/README.md b/node_modules/gulp-autoprefixer/README.md new file mode 100644 index 00000000..ffeccb20 --- /dev/null +++ b/node_modules/gulp-autoprefixer/README.md @@ -0,0 +1,21 @@ +gulp-autoprefixer +=========== + +[Autoprefixer](https://github.com/ai/autoprefixer) for [gulp](https://github.com/wearefractal/gulp). + + var prefix = require('gulp-autoprefixer'); + + +Example +------- + + gulp.src('./css/*.css') + .pipe(prefix("last 1 version", "> 1%", "ie 8", "ie 7")) + .pipe(gulp.dest('./dist/')) + + + +License +------- + +MIT diff --git a/node_modules/gulp-autoprefixer/index.js b/node_modules/gulp-autoprefixer/index.js new file mode 100644 index 00000000..12c491e3 --- /dev/null +++ b/node_modules/gulp-autoprefixer/index.js @@ -0,0 +1,58 @@ +/* jshint node:true */ + +'use strict'; + +var prefix = require('autoprefixer'), + gutil = require('gulp-util'), + transform = require('stream').Transform, + bufferstreams = require('bufferstreams'), + + PLUGIN_NAME = 'gulp-autoprefixer'; + +function autoprefixerTransform(opts) { + // Returns a callback that handles the buffered content + return function(err, buffer, callback) { + if (err) { + callback(gutil.PluginError(PLUGIN_NAME, err)); + } + var prefixed = prefix(opts).process(String(buffer)).css; + callback(null, new Buffer(prefixed)); + }; +} + +function gulpautoprefixer() { + var stream = new transform({ objectMode: true }), + opts = arguments.length > 0 ? [].slice.call(arguments, 0) : ['> 1%','last 2 versions','ff 17','opera 12.1']; + stream._transform = function(file, unused, done) { + // Pass through if null + if (file.isNull()) { + stream.push(file); + done(); + return; + } + if (file.isStream()) { + try { + file.contents = file.contents.pipe(new bufferstreams(autoprefixerTransform(opts))); + } catch (err) { + err.fileName = file.path; + stream.emit('error', new gutil.PluginError('gulp-autoprefixer', err)); + } + stream.push(file); + done(); + } else { + try { + var prefixed = prefix(opts).process(String(file.contents)).css; + file.contents = new Buffer(prefixed); + } catch (err) { + err.fileName = file.path; + stream.emit('error', new gutil.PluginError('gulp-autoprefixer', err)); + } + stream.push(file); + done(); + } + }; + return stream; +} + +gulpautoprefixer.autoprefixerTransform = autoprefixerTransform; +module.exports = gulpautoprefixer; diff --git a/node_modules/gulp-autoprefixer/node_modules/.bin/autoprefixer b/node_modules/gulp-autoprefixer/node_modules/.bin/autoprefixer new file mode 120000 index 00000000..e876d81c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/.bin/autoprefixer @@ -0,0 +1 @@ +../autoprefixer/bin/autoprefixer \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/ChangeLog.md b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/ChangeLog.md new file mode 100644 index 00000000..f7098f9c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/ChangeLog.md @@ -0,0 +1,276 @@ +## 1.0 “Plus ultra” +* Source map support. +* Save origin indents and code formatting. +* Change CSS parser to PostCSS. +* Preserve vendor-prefixed properties put right after unprefixed ones. +* Rename compile() to process() and return result object, instead of CSS string. +* Rename inspect() to info(). +* Add in binary -d option to specify output directory. +* Binary now will not concat output files. +* Allow to select last versions for specified browser. +* Add full browser names aliases: `firefox`, `explorer` and `blackberry`. +* Ignore case in browser names. +* Change license to MIT. +* Add prefixes inside custom at-rules. +* Add only necessary prefixes to selector inside prefixed at-rule. +* Safer backgrounds list parser in gradient hack. +* Prefix @keyframes inside @media. +* Don’t prefix values for CSS3 PIE properties. +* Binary now shows file name in syntax error. +* Use browserify to build standalone version. + +### 20131225: +* Fix deprecated API convertor. +* Add ::placeholder support for Firefix >= 18. +* Fix vendor prefixes order. + +### 20140103: +* Add webkit prefix for sticky position. +* Update browsers popularity statistics. + +### 20140109: +* Add selectors and at-rules sections to debug info. +* Fix outdated prefixes cleaning. + +### 20140110: +* Add `Firefox ESR` browser requirement. +* Opera 18 is moved to released versions. +* Add Opera 20 data. + +### 20140117: +* Chrome 32 is moved to released versions. +* Add Opera 34 data. + +### 20140130: +* Fix flexbox properties names in transitions. +* Add Chrome 35 and Firefox 29 data. + +### 20140203: +* Android 4.4 stock browser and Opera 19 are moved to released versions. +* Add Opera 21 data. +* Update browsers usage statistics. + +### 20140213 +* Add case insensitive to IE’s filter hack (by Dominik Schilling). +* Improve selector prefixing in some rare cases (by Simon Lydell). +* Firefox 27 is moved to released versions. +* Add Firefox 30 data. + +## 0.8 “Unbowed, Unbent, Unbroken” +* Add more browsers to defaults ("> 1%, last 2 versions, ff 17, opera 12.1" + instead of just "last 2 browsers"). +* Keep vendor prefixes without unprefixed version (like vendor-specific hacks). +* Convert gradients to old WebKit syntax (actual for Android 2.3). +* Better support for several syntaxes with one prefix (like Flexbox and + gradients in WebKit). +* Add intrinsic and extrinsic sizing values support. +* Remove never existed prefixes from common mistakes (like -ms-transition). +* Add Opera 17 data. +* Fix selector prefixes order. +* Fix browser versions order in inspect. + +### 20130903: +* Fix old WebKit gradients convertor on rgba() colors. +* Allow to write old direction syntax in gradients. + +### 20130906: +* Fix direction syntax in radial gradients. +* Don’t prefix IE filter with modern syntax. + +### 20130911: +* Fix parsing property name with spaces. + +### 20130919: +* Fix processing custom framework prefixes (by Johannes J. Schmidt). +* Concat outputs if several files compiled to one output. +* Decrease standalone build size by removing unnecessary Binary class. +* iOS 7 is moved to released versions. +* Clean up binary code (by Simon Lydell). + +### 20130923: +* Firefox 24 is moved to released versions. + +### 20131001: +* Add support for grab, grabbing, zoom-in and zoom-out cursor values. + +### 20131006: +* Chrome 30 is moved to released versions. + +### 20131007: +* Don’t add another prefixes in rule with prefixed selector. + +### 20131009: +* Opera 17 is moved to released versions. + +### 20131015: +* Fix converting multiple gradients to old webkit syntax (by Aleksei Androsov). + +### 20131017: +* Fix @host at-rule parsing. + +### 20131020: +* IE 11 and Andrid 4.3 is moved to released versions. +* Add Opera 18 data. +* Add @namespace support. +* Sort browser versions in data file. + +### 20131029: +* Add Safari 6.1 data. +* Add fx alias for Firefox. + +### 20131104: +* Update Android future version to 4.4. +* Google Chrome 32 added to future versions list. +* Firefox 25 now is actual version, 27 and 28 added to future versions. +* Browsers statistics are updated. + +### 20131205: +* Google Chrome 33 added to future releases list. +* Google Chrome 31 moved to current releases list. + +### 20131209: +* Use old webkit gradients for old iOS and Safari (by Chad von Nau). +* Fix direction conversion for old webkit gradients (by Chad von Nau). +* Update browsers popularity statistics. + +### 20131213: +* Firefox ESR in default browsers was changed to 24 version. +* Firefox 26 was moved to current releases list. +* Firefox 28 was added to future releases list. + +## 0.7 “We Do Not Sow” +* Add vendor prefixes to selectors. +* Add ::selection and ::placeholder selectors support. +* Allow to load support data from Can I Use pull requests. +* Remove deprecated API. + +### 20130806: +* Add hyphens support. + +### 20130807: +* Add tab-size support. +* Add :fullscreen support. + +### 20130808: +* Allow to select browser versions by > and >= operator. +* Fix flex properties in transition. + +### 20130810: +* Add Firefox 25 data. + +### 20130824: +* Add Chrome 31 and 30 data. +* Fix CSS comments parsing (by vladkens). + +## 0.6 “As High As Honor” +* New faster API, which cache preprocessed data. Old API is deprecated. +* A lot of perfomance improvements. +* Add Opera 15 -webkit- prefix support. +* Update Chrome 29 and Safari 7 prefixes data. +* Add minor browsers in popularity select. +* Better syntax error messages. + +### 20130721: +* Add Chrome 30 data. + +### 20130728: +* Don’t remove non-standard -webkit-background-clip: text. +* Don’t remove IE hack on CSS parse. + +### 20130729: +* Add Opera 16 data. +* Fix “Invalid range in character class” error on Firefox. + +### 20130730: +* Fix correct clone comments inside keyframes (by Alexey Plutalov). +* Fix angle recalculation in gradients (by Roman Komarov). + +### 20130731: +* Add border-image support. + +## 0.5 “Ours is the Fury” +* Rewrite Autoprefixer to be more flexible. +* Use css, instead of Rework, to fix CSS parsing errors faster. +* Fix a lot of CSS parsing errors. + +### 20130616: +* More useful message for CSS parsing errors. +* Remove old WebKit gradient syntax. +* Fix parsing error on comment with braces. + +### 20130617: +* Remove old Mozilla border-radius. +* Don’t prefix old IE filter. +* Remove old background-clip, background-size and background-origin prefixes. +* Speed up regexps in values. +* Allow to hack property declarations. + +### 20130625: +* Convert flexbox properties to 2009 and 2012 specifications. +* Improve messages on syntax errors. + +### 20130626: +* Add Firefox 24 data. +* Add prefixes for font-feature-settings. + +### 20130629: +* Fix convert flex properties to old box-flex. + +## 0.4 “Winter Is Coming” +* Remove outdated prefixes. +* Add border-radius and box-shadow properties to database. +* Change degrees in webkit gradients. + +### 20130515: +* Add old syntax in gradient direction. +* Add old syntax for display: flex. +* Update browser global usage statistics. + +### 20130521: +* Add Firefox 23 data. + +### 20130524: +* Add Chrome 29 data. + +### 20130528: +* Fix compatibilty with Rework from git master. +* Add minor browsers to data, which can be selected only directly. + +### 20130530: +* Add Opera 15 and iOS 6.1 data. +* Fix iOS versions in properties and values data. + +### 20130603: +* Use latest Rework 0.15 with a lot of CSS parsing fixes. +* Update browsers usage statistics. + +## 0.3 “Growing Strong” +* Rename `autoprefixer.filter()` to `autoprefixer.rework()`. +* Use own filters instead of Rework’s `prefix` and `prefixValue`. +* Smarter value prefixer without false match “order” in “border”. +* 40% faster. +* Don’t add unnecessary properties instead of Rework’s `prefixValue`. +* Don’t change properties order. +* Sort properties and values in inspect output. +* Add main to component config (by Jonathan Ong). +* Fix documentation (by Sergey Leschina and Mark Vasilkov). + +### 20130424: +* Fix value override in prefixer. + +### 20130427: +* Prefix several same values in one property. +* Fix Windows support in binary. +* Improve print errors in binary. + +### 20130502: +* Don’t add -webkit- prefix to IE filter. +* Don’t duplicate prefixes on second run. + +## 0.2 “Hear Me Roar!” +* Update parse libraries. +* Use component package manager to build standalone script. +* Add inspect to standalone script. + +## 0.1 “Fire and Blood” +* Initial release. diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/LICENSE b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/LICENSE new file mode 100644 index 00000000..da057b45 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright 2013 Andrey Sitnik + +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-autoprefixer/node_modules/autoprefixer/README.md b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/README.md new file mode 100644 index 00000000..276ab1b2 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/README.md @@ -0,0 +1,474 @@ +# Autoprefixer + + + +Parse CSS and add vendor prefixes to CSS rules using values +from the [Can I Use](http://caniuse.com/). + +Write your CSS rules without vendor prefixes (in fact, forget about them +entirely): + +```css +:fullscreen a { + transition: transform 1s +} +``` + +Process your CSS by Autoprefixer: + +```js +var prefixed = autoprefixer.process(css).css; +``` + +It will use the data on current browser popularity and properties support +to apply prefixes for you: + +```css +:-webkit-full-screen a { + -webkit-transition: -webkit-transform 1s; + transition: transform 1s +} +:-moz-full-screen a { + transition: transform 1s +} +:-ms-fullscreen a { + transition: transform 1s +} +:fullscreen a { + -webkit-transition: -webkit-transform 1s; + transition: transform 1s +} +``` + +You can play with your CSS in [interactive demo] of Autoprefixer. + +Twitter account for news and releases: [@autoprefixer]. + +Sponsored by [Evil Martians]. Based on [PostCSS] framework. + +[interactive demo]: http://jsfiddle.net/simevidas/udyTs/show/light/ +[@autoprefixer]: https://twitter.com/autoprefixer +[Evil Martians]: http://evilmartians.com/ +[PostCSS]: https://github.com/ai/postcss + +## Features + +### Forget about prefixes + +The best tool is a tool you can't see and one that does the work for you. +This is the main idea behind Autoprefixer. + +Autoprefixer interface is simple: just forget about vendor prefixes +and write normal CSS according to latest W3C specs. You don’t need +a special language (like Sass) or special mixins. + +Because Autoprefixer is a postprocessor for CSS, +you can also use it with preprocessors, such as Sass, Stylus or LESS. + +### Actual data from Can I Use + +Autoprefixer uses the most recent data from [Can I Use](http://caniuse.com/), +understands which browsers are actual and popular and adds only the necessary +vendor prefixes. + +It also cleans your CSS from old prefixes (like prefixed `border-radius`, +produced by many CSS libraries): + +```css +a { + -webkit-border-radius: 5px; + border-radius: 5px +} +``` + +compiles to: + +```css +a { + border-radius: 5px +} +``` + +Note, that Autoprefixer doesn’t load Can I Use data every time. This data +is already packed to release, so with same Autoprefixer version you always will +have same output result. + +### Flexbox, Gradients, etc. + +Flexbox or gradients have different syntaxes in different browsers +(sometimes you need to recalculate angles, sometimes you need 2 old properties +instead of new one), but Autoprefixer hides this from you. + +Just code by latest W3C specs and Autoprefixer will produce the code +for old browsers: + +```css +a { + display: flex; +} +``` + +compiles to: + +```css +a { + display: -webkit-box; + display: -webkit-flex; + display: -moz-box; + display: -ms-flexbox; + display: flex +} +``` + +Autoprefixer has [22 special hacks] to fix browser’s differences. + +[22 special hacks]: https://github.com/ai/autoprefixer/tree/master/lib/hacks + +### Fast + +Autoprefixer is about 16 times faster than Compass and 8 times faster +than Stylus. + +On a Core i7 with 10 GB of RAM and SSD, benchmark with GitHub styles is: + +``` +~/Dev/autoprefixer$ ./node_modules/.bin/cake bench +Load GitHub styles +Autoprefixer: 489 ms +Compass: 4156 ms (8.5 times slower) +Stylus: 4165 ms (8.5 times slower) +``` + +Unlike [-prefix-free](http://leaverou.github.io/prefixfree/), Autoprefixer +compiles CSS once on deploy and doesn’t hit client-side performance. + +## Browsers + +You can specify the browsers you want to target in your project: + +```js +autoprefixer("last 1 version", "> 1%", "Explorer 7").process(css).css; +``` + +* `last 2 versions` is last versions for each browser. Like “last 2 versions” + [strategy](http://support.google.com/a/bin/answer.py?answer=33864) in + Google. +* `last 2 Chrome versions` is last versions of specify browser. +* `> 5%` is browser versions, selected by global usage statistics. +* `Firefox > 20` is Firefox newer versions than 20. +* `Firefox >= 20` is Firefox version 20 or newer. +* `Firefix ESR` is latest [Firefox ESR] version. +* `none` don’t set any browsers to clean CSS from any vendor prefixes. +* You can also set browsers directly. + +Blackberry and stock Android browsers will not be used in `last n versions`. +You can add them by name: + +```js +autoprefixer("last 1 version", "BlackBerry 10", "Android 4").process(css).css; +``` + +Browsers names (case insensitive): +* `Android` for old Android stock browser. +* `BlackBerry` or `bb` for Blackberry browser. +* `Chrome` for Google Chrome. +* `Firefox` or `ff` for Mozilla Firefox. +* `Explorer` or `ie` for Internet Explorer. +* `iOS` for iOS Safari. +* `Opera` for Opera. +* `Safari` for desktop Safari. + +By default, Autoprefixer uses `> 1%, last 2 versions, Firefox ESR, Opera 12.1`: +* Latest [Firefox ESR] is a 24 version. +* Opera 12.1 will be in list until Opera supports non-Blink 12.x branch. + +[Firefox ESR]: http://www.mozilla.org/en/firefox/organizations/faq/ + +## Source Map + +Autoprefixer will generate a source map if you set `map` option to `true`. + +You must set input and output CSS files paths (by `from` and `to` options) +to generate a correct map. + +```js +var result = autoprefixer.process(css, { + map: true, + from: 'main.css', + to: 'main.out.css' +}); + +result.css //=> Prefixed CSS +result.map //=> Source map content + +fs.writeFileSync('main.out.css.map', result.map); +``` + +Autoprefixer can also modify previous source map (for example, from Sass +compilation). Just set original source map content (as string or JS object) +to `map` option: + +```js +var result = autoprefixer.process(css, { + map: fs.readFileSync('main.sass.css.map'), + from: 'main.sass.css', + to: 'main.min.css' +}); + +result.map //=> Source map from main.sass to main.min.css +``` + +## Debug + +You can check which browsers are selected and which properties will be prefixed: + +```js +info = autoprefixer("last 1 version").info(); +console.log(info); +``` + +Or by CLI command: + +```sh +autoprefixer -i +``` + +## FAQ + +### Does it add polyfills for old browsers? + +No. Autoprefixer only adds prefixes, not polyfills. There are two reasons: + +1. Prefixes and polyfills are very different and need a different API. + Two separate libraries would be much better. +2. Most of IE polyfills are very bad for client perfomance. They use slow hacks + and old IEs is mostly used on old hardware. Most of CSS 3 features that is + only used for styling should be ignored in old IEs as it is recommended in + Graceful Degradation. + +### Why don’t gradients work in Firefox? + +Check that you use correct [direction syntax]. For example, you should use +`to bottom` instead of `top`: + +```css +a { + background: linear-gradient(to bottom, white, black) +} +``` + +Unfortunately, unprefixed gradients use different direction syntax, that most +of old gradients examples, so be careful and use always latest W3C specs with +Autoprefixer. + +[direction syntax]: https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient + +### Why doesn’t Autoprefixer add prefixes to `border-radius`? + +Developers are often surprised by how few prefixes are required today. +If Autoprefixer doesn’t add prefixes to your CSS, check if they’re still +required on [Can I Use](http://caniuse.com/). + +If a prefix is required, but Autoprefixer doesn’t add it or adds it +incorrectly, please +[report an issue](https://github.com/ai/autoprefixer/issues/new) +and include your source CSS and expected output. + +### Why doesn’t Autoprefixer support `appearance`? + +Unlike `transition`, the `appearance` property is not a part of +any specification. So there is no `appearance`, only `-moz-appearance` +and `-webkit-appearance`. Quote from [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-appearance): + +> Do not use this property on Web sites: not only is it non-standard, but its +> behavior changes from one browser to another. Even the keyword `none` does not +> have the same behavior on each form element across different browsers, and +> some do not support it at all. + +## Usage + +### Grunt + +You can use the +[grunt-autoprefixer](https://github.com/nDmitry/grunt-autoprefixer) +plugin for Grunt. Install the npm package and add it to Gruntfile: + +```js +grunt.loadNpmTasks('grunt-autoprefixer'); +``` + +### Compass + +If you use Compass binary to compile your styles, you can easily integrate +Autoprefixer with it. Install `autoprefixer-rails` gem: + +``` +gem install autoprefixer-rails +``` + +and add post-compile hook to `config.rb`: + +```ruby +require 'autoprefixer-rails' +require 'csso' + +on_stylesheet_saved do |file| + css = File.read(file) + File.open(file, 'w') do |io| + io << AutoprefixerRails.process(css) + end +end +``` + +You can set browsers array as second argument in `process` method: + +```ruby +io << AutoprefixerRails.process(css, ["last 1 version", "> 1%", "Explorer 7"]) +``` + +### Stylus + +If you use Stylus CLI, you can add Autoprefixer by +[autoprefixer-stylus](https://github.com/jenius/autoprefixer-stylus) plugin. + +Just install npm package and use it in `-u` option: + +``` +stylus -u autoprefixer-stylus file.css +``` + +### Ruby on Rails + +Add [autoprefixer-rails](https://github.com/ai/autoprefixer-rails) gem +to `Gemfile` and write CSS in a usual way: + +```ruby +gem "autoprefixer-rails" +``` + +### Ruby + +You can integrate Autoprefixer into your Sprockets environment +by `autoprefixer-rails` gem: + +```ruby +AutoprefixerRails.install(sprockets_env) +``` + +or process CSS from plain Ruby: + +```ruby +prefixed = AutoprefixerRails.compile(css) +``` + +### Prepros + +If you want to build your assets in GUI, try +[Prepros](http://alphapixels.com/prepros/). Just set “Auto Prefix CSS” +[checkbox](https://f.cloud.github.com/assets/3478693/930798/faa29892-0016-11e3-8901-87850de7aed2.jpg) +in right panel. + + + +### Mincer + +To use Autoprefixer in [Mincer](https://github.com/nodeca/mincer), +install `autoprefixer` npm package and enable it: + +```js +environment.enable('autoprefixer'); +``` + +### Middleman + +Add [middleman-autoprefixer](https://github.com/porada/middleman-autoprefixer) +gem to `Gemfile`: + +```ruby +gem "middleman-autoprefixer" +``` + +and activate the extension in your project’s `config.rb`: + +```ruby +activate :autoprefixer +``` + +### Node.js + +Use `autoprefixer` npm package: + +```js +var autoprefixer = require('autoprefixer'); +var css = 'a { transition: transform 1s }'; +var prefixed = autoprefixer.process(css).css; +``` + +### PHP + +You can use Autoprefixer in PHP by +[autoprefixer-php](https://github.com/vladkens/autoprefixer-php) library: + + +```php +$autoprefixer = new Autoprefixer(); +$css = 'a { transition: transform 1s }'; +$prefixed = $autoprefixer->compile($css); +``` + +### JavaScript + +You can use Autoprefixer in the browser or a non-Node.js runtime +with [standalone version](https://raw.github.com/ai/autoprefixer-rails/master/vendor/autoprefixer.js). + +### PostCSS + +Autoprefixer can be also used as a [PostCSS](https://github.com/ai/postcss) +processor, so you can combine it with other processors and parse CSS only once: + +```js +postcss(). + use( autoprefixer(['> 1%', 'opera 12.5']).postcss ). + use( compressor ). + process(css); +``` + +### Sublime Text + +You can process your styles directly in Sublime Text with the +[sublime-autoprefixer](https://github.com/sindresorhus/sublime-autoprefixer) +plugin. + +### Brackets + +Styles can processed automatically in Brackets using the +[brackets-autoprefixer](https://github.com/mikaeljorhult/brackets-autoprefixer) +extension. + + +### Others + +You can use the `autoprefixer` binary to process CSS files using +any assets manager: + +``` +sudo npm install --global autoprefixer +autoprefixer *.css +``` + +See `autoprefixer -h` for help. + +## In-package Update + +It’s highly recommended that you always use the latest version of Autoprefixer. +If by any chance you or your company are not able to update the package +(e.g. in case of long test periods before any library updates), you can still +update the very browser data that Autoprefixer fetches from Can I Use: + +``` +autoprefixer --update +``` + +Note that the in-package update doesn’t get any code fixes nor the +implementation of new features. It just keeps the browser popularity and +support data up to date, and adds new browser versions. diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/bin/autoprefixer b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/bin/autoprefixer new file mode 100755 index 00000000..f98e533b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/bin/autoprefixer @@ -0,0 +1,13 @@ +#!/usr/bin/env node +(function() { + var Binary, binary; + + Binary = require('../lib/binary'); + + binary = new Binary(process); + + binary.run(function() { + return process.exit(binary.status); + }); + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/data/browsers.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/data/browsers.js new file mode 100644 index 00000000..9b80c63a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/data/browsers.js @@ -0,0 +1,50 @@ +(function() { + module.exports = { + android: { + prefix: "-webkit-", + minor: true, + versions: [4.4, 4.3, 4.2, 4.1, 4, 3, 2.3, 2.2, 2.1], + popularity: [0.0894926, 0.74151, 0.74151, 2.29485, 1.0803, 0.00639233, 1.35517, 0.0831003, 0.0255693] + }, + bb: { + prefix: "-webkit-", + minor: true, + versions: [10, 7], + popularity: [0, 0.153316] + }, + chrome: { + prefix: "-webkit-", + future: [35, 34, 33], + versions: [32, 31, 30, 29, 28, 27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4], + popularity: [15.5204, 15.3756, 0.411642, 0.480249, 0.274428, 0.312543, 0.221067, 0.121968, 0.068607, 0.083853, 0.121968, 0.480249, 0.045738, 0.038115, 0.099099, 0.030492, 0.038115, 0.068607, 0.045738, 0.053361, 0.060984, 0.121968, 0.038115, 0.015246, 0.022869, 0.022869, 0.030492, 0.022869, 0.022869] + }, + ff: { + prefix: "-moz-", + future: [30, 29, 28], + versions: [27, 26, 25, 24, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3.6, 3.5, 3, 2], + popularity: [0.472626, 11.9757, 0.411642, 0.266805, 0.15246, 0.137214, 0.15246, 0.114345, 0.106722, 0.099099, 0.137214, 0.160083, 0.099099, 0.07623, 0.083853, 0.175329, 0.07623, 0.106722, 0.045738, 0.068607, 0.030492, 0.045738, 0.038115, 0.060984, 0.251559, 0.038115, 0.091476, 0.015246] + }, + ie: { + prefix: "-ms-", + versions: [11, 10, 9, 8, 7, 6, 5.5], + popularity: [6.40778, 3.74183, 3.18016, 5.65625, 0.213593, 0.28479, 0.009298] + }, + ios: { + prefix: "-webkit-", + versions: [7, 6.1, 6, 5.1, 5, 4.3, 4.2, 4.1, 4, 3.2], + popularity: [4.18754, 0.4515445, 0.4515445, 0.1317005, 0.1317005, 0.01075105, 0.01075105, 0.00537555, 0.00537555, 0] + }, + opera: { + prefix: "-o-", + future: [21, 20], + versions: [19, 18, 17, 16, 15, 12.1, 12, 11.6, 11.5, 11.1, 11, 10.6, 10.5, 10.1, 10, 9.6, 9.5], + popularity: [0.038115, 0.358281, 0.030492, 0.022869, 0.015246, 0.419265, 0.038115, 0.030492, 0.015246, 0.008219, 0.008219, 0.007623, 0.008392, 0.007623, 0.007623, 0.0038115, 0.0038115] + }, + safari: { + prefix: "-webkit-", + versions: [7, 6.1, 6, 5.1, 5, 4, 3.2, 3.1], + popularity: [1.11296, 0.815661, 0.602217, 0.930006, 0.274428, 0.114345, 0.008692, 0] + } + }; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/data/prefixes.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/data/prefixes.js new file mode 100644 index 00000000..5c14021a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/data/prefixes.js @@ -0,0 +1,311 @@ +(function() { + module.exports = { + "::placeholder": { + selector: true, + browsers: ["android 4.4", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 4 old", "ff 5 old", "ff 6 old", "ff 7 old", "ff 8 old", "ff 9 old", "ff 10 old", "ff 11 old", "ff 12 old", "ff 13 old", "ff 14 old", "ff 15 old", "ff 16 old", "ff 17 old", "ff 18 old", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ie 10", "ie 11", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "::selection": { + selector: true, + browsers: ["ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30"] + }, + ":fullscreen": { + selector: true, + browsers: ["chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ie 11", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "@keyframes": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "align-content": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4 2009", "chrome 5 2009", "chrome 6 2009", "chrome 7 2009", "chrome 8 2009", "chrome 9 2009", "chrome 10 2009", "chrome 11 2009", "chrome 12 2009", "chrome 13 2009", "chrome 14 2009", "chrome 15 2009", "chrome 16 2009", "chrome 17 2009", "chrome 18 2009", "chrome 19 2009", "chrome 20 2009", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ie 10", "ios 3.2 2009", "ios 4 2009", "ios 4.1 2009", "ios 4.2 2009", "ios 4.3 2009", "ios 5 2009", "ios 5.1 2009", "ios 6 2009", "ios 6.1 2009", "ios 7", "opera 15", "opera 16", "safari 3.1 2009", "safari 3.2 2009", "safari 4 2009", "safari 5 2009", "safari 5.1 2009", "safari 6 2009", "safari 6.1 2009", "safari 7"] + }, + "align-items": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4 2009", "chrome 5 2009", "chrome 6 2009", "chrome 7 2009", "chrome 8 2009", "chrome 9 2009", "chrome 10 2009", "chrome 11 2009", "chrome 12 2009", "chrome 13 2009", "chrome 14 2009", "chrome 15 2009", "chrome 16 2009", "chrome 17 2009", "chrome 18 2009", "chrome 19 2009", "chrome 20 2009", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ie 10", "ios 3.2 2009", "ios 4 2009", "ios 4.1 2009", "ios 4.2 2009", "ios 4.3 2009", "ios 5 2009", "ios 5.1 2009", "ios 6 2009", "ios 6.1 2009", "ios 7", "opera 15", "opera 16", "safari 3.1 2009", "safari 3.2 2009", "safari 4 2009", "safari 5 2009", "safari 5.1 2009", "safari 6 2009", "safari 6.1 2009", "safari 7"] + }, + "align-self": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4 2009", "chrome 5 2009", "chrome 6 2009", "chrome 7 2009", "chrome 8 2009", "chrome 9 2009", "chrome 10 2009", "chrome 11 2009", "chrome 12 2009", "chrome 13 2009", "chrome 14 2009", "chrome 15 2009", "chrome 16 2009", "chrome 17 2009", "chrome 18 2009", "chrome 19 2009", "chrome 20 2009", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ie 10", "ios 3.2 2009", "ios 4 2009", "ios 4.1 2009", "ios 4.2 2009", "ios 4.3 2009", "ios 5 2009", "ios 5.1 2009", "ios 6 2009", "ios 6.1 2009", "ios 7", "opera 15", "opera 16", "safari 3.1 2009", "safari 3.2 2009", "safari 4 2009", "safari 5 2009", "safari 5.1 2009", "safari 6 2009", "safari 6.1 2009", "safari 7"] + }, + animation: { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "animation-delay": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "animation-direction": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "animation-duration": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "animation-fill-mode": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "animation-iteration-count": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "animation-name": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "animation-play-state": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "animation-timing-function": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "backface-visibility": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ie 9", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 10.5", "opera 10.6", "opera 11", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "background-clip": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "ff 3.6", "opera 10", "opera 10.1"] + }, + "background-origin": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "ff 3.6", "opera 10", "opera 10.1"] + }, + "background-size": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "ff 3.6", "opera 10", "opera 10.1"] + }, + "border-bottom-left-radius": { + mistakes: ["-ms-"], + browsers: ["android 2.1", "chrome 4", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ios 3.2", "safari 3.1", "safari 3.2", "safari 4"], + transition: true + }, + "border-bottom-right-radius": { + mistakes: ["-ms-"], + browsers: ["android 2.1", "chrome 4", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ios 3.2", "safari 3.1", "safari 3.2", "safari 4"], + transition: true + }, + "border-image": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "opera 11", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "opera 12.1", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1"] + }, + "border-radius": { + mistakes: ["-ms-"], + browsers: ["android 2.1", "chrome 4", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ios 3.2", "safari 3.1", "safari 3.2", "safari 4"], + transition: true + }, + "border-top-left-radius": { + mistakes: ["-ms-"], + browsers: ["android 2.1", "chrome 4", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ios 3.2", "safari 3.1", "safari 3.2", "safari 4"], + transition: true + }, + "border-top-right-radius": { + mistakes: ["-ms-"], + browsers: ["android 2.1", "chrome 4", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ios 3.2", "safari 3.1", "safari 3.2", "safari 4"], + transition: true + }, + "box-shadow": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "bb 7", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "ff 3.5", "ff 3.6", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "safari 3.1", "safari 3.2", "safari 4", "safari 5"], + transition: true + }, + "box-sizing": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "bb 7", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "safari 3.1", "safari 3.2", "safari 4", "safari 5"] + }, + "break-after": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "break-before": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "break-inside": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + calc: { + props: ["*"], + browsers: ["bb 10", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 6", "ios 6.1", "safari 6"] + }, + "column-count": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "column-fill": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "column-gap": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"], + transition: true + }, + "column-rule": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"], + transition: true + }, + "column-rule-color": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"], + transition: true + }, + "column-rule-style": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "column-rule-width": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"], + transition: true + }, + "column-span": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "column-width": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"], + transition: true + }, + columns: { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"], + transition: true + }, + "display-flex": { + props: ["display"], + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4 2009", "chrome 5 2009", "chrome 6 2009", "chrome 7 2009", "chrome 8 2009", "chrome 9 2009", "chrome 10 2009", "chrome 11 2009", "chrome 12 2009", "chrome 13 2009", "chrome 14 2009", "chrome 15 2009", "chrome 16 2009", "chrome 17 2009", "chrome 18 2009", "chrome 19 2009", "chrome 20 2009", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ie 10", "ios 3.2 2009", "ios 4 2009", "ios 4.1 2009", "ios 4.2 2009", "ios 4.3 2009", "ios 5 2009", "ios 5.1 2009", "ios 6 2009", "ios 6.1 2009", "ios 7", "opera 15", "opera 16", "safari 3.1 2009", "safari 3.2 2009", "safari 4 2009", "safari 5 2009", "safari 5.1 2009", "safari 6 2009", "safari 6.1 2009", "safari 7"] + }, + "fill-available": { + props: ["width", "min-width", "max-width", "height", "min-height", "max-height"], + browsers: ["android 4.4", "bb 10", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 6.1", "safari 7"] + }, + filter: { + browsers: ["android 4.4", "bb 10", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 6", "safari 6.1", "safari 7"], + transition: true + }, + "fit-content": { + props: ["width", "min-width", "max-width", "height", "min-height", "max-height"], + browsers: ["android 4.4", "bb 10", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 6.1", "safari 7"] + }, + flex: { + transition: true, + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4 2009", "chrome 5 2009", "chrome 6 2009", "chrome 7 2009", "chrome 8 2009", "chrome 9 2009", "chrome 10 2009", "chrome 11 2009", "chrome 12 2009", "chrome 13 2009", "chrome 14 2009", "chrome 15 2009", "chrome 16 2009", "chrome 17 2009", "chrome 18 2009", "chrome 19 2009", "chrome 20 2009", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ie 10", "ios 3.2 2009", "ios 4 2009", "ios 4.1 2009", "ios 4.2 2009", "ios 4.3 2009", "ios 5 2009", "ios 5.1 2009", "ios 6 2009", "ios 6.1 2009", "ios 7", "opera 15", "opera 16", "safari 3.1 2009", "safari 3.2 2009", "safari 4 2009", "safari 5 2009", "safari 5.1 2009", "safari 6 2009", "safari 6.1 2009", "safari 7"] + }, + "flex-basis": { + transition: true, + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4 2009", "chrome 5 2009", "chrome 6 2009", "chrome 7 2009", "chrome 8 2009", "chrome 9 2009", "chrome 10 2009", "chrome 11 2009", "chrome 12 2009", "chrome 13 2009", "chrome 14 2009", "chrome 15 2009", "chrome 16 2009", "chrome 17 2009", "chrome 18 2009", "chrome 19 2009", "chrome 20 2009", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ie 10", "ios 3.2 2009", "ios 4 2009", "ios 4.1 2009", "ios 4.2 2009", "ios 4.3 2009", "ios 5 2009", "ios 5.1 2009", "ios 6 2009", "ios 6.1 2009", "ios 7", "opera 15", "opera 16", "safari 3.1 2009", "safari 3.2 2009", "safari 4 2009", "safari 5 2009", "safari 5.1 2009", "safari 6 2009", "safari 6.1 2009", "safari 7"] + }, + "flex-direction": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4 2009", "chrome 5 2009", "chrome 6 2009", "chrome 7 2009", "chrome 8 2009", "chrome 9 2009", "chrome 10 2009", "chrome 11 2009", "chrome 12 2009", "chrome 13 2009", "chrome 14 2009", "chrome 15 2009", "chrome 16 2009", "chrome 17 2009", "chrome 18 2009", "chrome 19 2009", "chrome 20 2009", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ie 10", "ios 3.2 2009", "ios 4 2009", "ios 4.1 2009", "ios 4.2 2009", "ios 4.3 2009", "ios 5 2009", "ios 5.1 2009", "ios 6 2009", "ios 6.1 2009", "ios 7", "opera 15", "opera 16", "safari 3.1 2009", "safari 3.2 2009", "safari 4 2009", "safari 5 2009", "safari 5.1 2009", "safari 6 2009", "safari 6.1 2009", "safari 7"] + }, + "flex-flow": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4 2009", "chrome 5 2009", "chrome 6 2009", "chrome 7 2009", "chrome 8 2009", "chrome 9 2009", "chrome 10 2009", "chrome 11 2009", "chrome 12 2009", "chrome 13 2009", "chrome 14 2009", "chrome 15 2009", "chrome 16 2009", "chrome 17 2009", "chrome 18 2009", "chrome 19 2009", "chrome 20 2009", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ie 10", "ios 3.2 2009", "ios 4 2009", "ios 4.1 2009", "ios 4.2 2009", "ios 4.3 2009", "ios 5 2009", "ios 5.1 2009", "ios 6 2009", "ios 6.1 2009", "ios 7", "opera 15", "opera 16", "safari 3.1 2009", "safari 3.2 2009", "safari 4 2009", "safari 5 2009", "safari 5.1 2009", "safari 6 2009", "safari 6.1 2009", "safari 7"] + }, + "flex-grow": { + transition: true, + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4 2009", "chrome 5 2009", "chrome 6 2009", "chrome 7 2009", "chrome 8 2009", "chrome 9 2009", "chrome 10 2009", "chrome 11 2009", "chrome 12 2009", "chrome 13 2009", "chrome 14 2009", "chrome 15 2009", "chrome 16 2009", "chrome 17 2009", "chrome 18 2009", "chrome 19 2009", "chrome 20 2009", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ie 10", "ios 3.2 2009", "ios 4 2009", "ios 4.1 2009", "ios 4.2 2009", "ios 4.3 2009", "ios 5 2009", "ios 5.1 2009", "ios 6 2009", "ios 6.1 2009", "ios 7", "opera 15", "opera 16", "safari 3.1 2009", "safari 3.2 2009", "safari 4 2009", "safari 5 2009", "safari 5.1 2009", "safari 6 2009", "safari 6.1 2009", "safari 7"] + }, + "flex-shrink": { + transition: true, + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4 2009", "chrome 5 2009", "chrome 6 2009", "chrome 7 2009", "chrome 8 2009", "chrome 9 2009", "chrome 10 2009", "chrome 11 2009", "chrome 12 2009", "chrome 13 2009", "chrome 14 2009", "chrome 15 2009", "chrome 16 2009", "chrome 17 2009", "chrome 18 2009", "chrome 19 2009", "chrome 20 2009", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ie 10", "ios 3.2 2009", "ios 4 2009", "ios 4.1 2009", "ios 4.2 2009", "ios 4.3 2009", "ios 5 2009", "ios 5.1 2009", "ios 6 2009", "ios 6.1 2009", "ios 7", "opera 15", "opera 16", "safari 3.1 2009", "safari 3.2 2009", "safari 4 2009", "safari 5 2009", "safari 5.1 2009", "safari 6 2009", "safari 6.1 2009", "safari 7"] + }, + "flex-wrap": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4 2009", "chrome 5 2009", "chrome 6 2009", "chrome 7 2009", "chrome 8 2009", "chrome 9 2009", "chrome 10 2009", "chrome 11 2009", "chrome 12 2009", "chrome 13 2009", "chrome 14 2009", "chrome 15 2009", "chrome 16 2009", "chrome 17 2009", "chrome 18 2009", "chrome 19 2009", "chrome 20 2009", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ie 10", "ios 3.2 2009", "ios 4 2009", "ios 4.1 2009", "ios 4.2 2009", "ios 4.3 2009", "ios 5 2009", "ios 5.1 2009", "ios 6 2009", "ios 6.1 2009", "ios 7", "opera 15", "opera 16", "safari 3.1 2009", "safari 3.2 2009", "safari 4 2009", "safari 5 2009", "safari 5.1 2009", "safari 6 2009", "safari 6.1 2009", "safari 7"] + }, + "font-feature-settings": { + browsers: ["android 4.4", "bb 10", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 6.1", "safari 7"] + }, + "font-kerning": { + browsers: ["android 4.4", "bb 10", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 6.1", "safari 7"] + }, + "font-language-override": { + browsers: ["android 4.4", "bb 10", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 6.1", "safari 7"] + }, + "font-variant-ligatures": { + browsers: ["android 4.4", "bb 10", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 6.1", "safari 7"] + }, + grab: { + props: ["cursor"], + browsers: ["chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + grabbing: { + props: ["cursor"], + browsers: ["chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + hyphens: { + browsers: ["ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ie 10", "ie 11", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "inline-flex": { + props: ["display"], + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4 2009", "chrome 5 2009", "chrome 6 2009", "chrome 7 2009", "chrome 8 2009", "chrome 9 2009", "chrome 10 2009", "chrome 11 2009", "chrome 12 2009", "chrome 13 2009", "chrome 14 2009", "chrome 15 2009", "chrome 16 2009", "chrome 17 2009", "chrome 18 2009", "chrome 19 2009", "chrome 20 2009", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ie 10", "ios 3.2 2009", "ios 4 2009", "ios 4.1 2009", "ios 4.2 2009", "ios 4.3 2009", "ios 5 2009", "ios 5.1 2009", "ios 6 2009", "ios 6.1 2009", "ios 7", "opera 15", "opera 16", "safari 3.1 2009", "safari 3.2 2009", "safari 4 2009", "safari 5 2009", "safari 5.1 2009", "safari 6 2009", "safari 6.1 2009", "safari 7"] + }, + "justify-content": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4 2009", "chrome 5 2009", "chrome 6 2009", "chrome 7 2009", "chrome 8 2009", "chrome 9 2009", "chrome 10 2009", "chrome 11 2009", "chrome 12 2009", "chrome 13 2009", "chrome 14 2009", "chrome 15 2009", "chrome 16 2009", "chrome 17 2009", "chrome 18 2009", "chrome 19 2009", "chrome 20 2009", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ie 10", "ios 3.2 2009", "ios 4 2009", "ios 4.1 2009", "ios 4.2 2009", "ios 4.3 2009", "ios 5 2009", "ios 5.1 2009", "ios 6 2009", "ios 6.1 2009", "ios 7", "opera 15", "opera 16", "safari 3.1 2009", "safari 3.2 2009", "safari 4 2009", "safari 5 2009", "safari 5.1 2009", "safari 6 2009", "safari 6.1 2009", "safari 7"] + }, + "linear-gradient": { + props: ["background", "background-image", "border-image"], + mistakes: ["-ms-"], + browsers: ["android 2.1 old", "android 2.2 old", "android 2.3 old", "android 3 old", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2 old", "ios 4 old", "ios 4.1 old", "ios 4.2 old", "ios 4.3 old", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "safari 4 old", "safari 5 old", "safari 5.1", "safari 6"] + }, + "max-content": { + props: ["width", "min-width", "max-width", "height", "min-height", "max-height"], + browsers: ["android 4.4", "bb 10", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 6.1", "safari 7"] + }, + "min-content": { + props: ["width", "min-width", "max-width", "height", "min-height", "max-height"], + browsers: ["android 4.4", "bb 10", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 6.1", "safari 7"] + }, + order: { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4 2009", "chrome 5 2009", "chrome 6 2009", "chrome 7 2009", "chrome 8 2009", "chrome 9 2009", "chrome 10 2009", "chrome 11 2009", "chrome 12 2009", "chrome 13 2009", "chrome 14 2009", "chrome 15 2009", "chrome 16 2009", "chrome 17 2009", "chrome 18 2009", "chrome 19 2009", "chrome 20 2009", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ie 10", "ios 3.2 2009", "ios 4 2009", "ios 4.1 2009", "ios 4.2 2009", "ios 4.3 2009", "ios 5 2009", "ios 5.1 2009", "ios 6 2009", "ios 6.1 2009", "ios 7", "opera 15", "opera 16", "safari 3.1 2009", "safari 3.2 2009", "safari 4 2009", "safari 5 2009", "safari 5.1 2009", "safari 6 2009", "safari 6.1 2009", "safari 7"] + }, + perspective: { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ie 9", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 10.5", "opera 10.6", "opera 11", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"], + transition: true + }, + "perspective-origin": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ie 9", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 10.5", "opera 10.6", "opera 11", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"], + transition: true + }, + "radial-gradient": { + props: ["background", "background-image", "border-image"], + mistakes: ["-ms-"], + browsers: ["android 2.1 old", "android 2.2 old", "android 2.3 old", "android 3 old", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2 old", "ios 4 old", "ios 4.1 old", "ios 4.2 old", "ios 4.3 old", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "safari 4 old", "safari 5 old", "safari 5.1", "safari 6"] + }, + "repeating-linear-gradient": { + props: ["background", "background-image", "border-image"], + mistakes: ["-ms-"], + browsers: ["android 2.1 old", "android 2.2 old", "android 2.3 old", "android 3 old", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2 old", "ios 4 old", "ios 4.1 old", "ios 4.2 old", "ios 4.3 old", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "safari 4 old", "safari 5 old", "safari 5.1", "safari 6"] + }, + "repeating-radial-gradient": { + props: ["background", "background-image", "border-image"], + mistakes: ["-ms-"], + browsers: ["android 2.1 old", "android 2.2 old", "android 2.3 old", "android 3 old", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2 old", "ios 4 old", "ios 4.1 old", "ios 4.2 old", "ios 4.3 old", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "safari 4 old", "safari 5 old", "safari 5.1", "safari 6"] + }, + sticky: { + props: ["position"], + browsers: ["ios 6", "ios 6.1", "ios 7", "safari 6.1", "safari 7"] + }, + "tab-size": { + browsers: ["ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "opera 10.6", "opera 11", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "opera 12.1"] + }, + transform: { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ie 9", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 10.5", "opera 10.6", "opera 11", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"], + transition: true + }, + "transform-origin": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ie 9", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 10.5", "opera 10.6", "opera 11", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"], + transition: true + }, + "transform-style": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ie 9", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 10.5", "opera 10.6", "opera 11", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + transition: { + mistakes: ["-ms-"], + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "opera 10.5", "opera 10.6", "opera 11", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6"] + }, + "transition-delay": { + mistakes: ["-ms-"], + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "opera 10.5", "opera 10.6", "opera 11", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6"] + }, + "transition-duration": { + mistakes: ["-ms-"], + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "opera 10.5", "opera 10.6", "opera 11", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6"] + }, + "transition-property": { + mistakes: ["-ms-"], + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "opera 10.5", "opera 10.6", "opera 11", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6"] + }, + "transition-timing-function": { + mistakes: ["-ms-"], + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "bb 7", "bb 10", "chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "opera 10.5", "opera 10.6", "opera 11", "opera 11.1", "opera 11.5", "opera 11.6", "opera 12", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6"] + }, + "user-select": { + browsers: ["android 2.1", "android 2.2", "android 2.3", "android 3", "android 4", "android 4.1", "android 4.2", "android 4.3", "android 4.4", "bb 7", "bb 10", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "ff 24", "ff 25", "ff 26", "ff 27", "ff 28", "ff 29", "ff 30", "ie 10", "ie 11", "ios 3.2", "ios 4", "ios 4.1", "ios 4.2", "ios 4.3", "ios 5", "ios 5.1", "ios 6", "ios 6.1", "ios 7", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "zoom-in": { + props: ["cursor"], + browsers: ["chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + }, + "zoom-out": { + props: ["cursor"], + browsers: ["chrome 4", "chrome 5", "chrome 6", "chrome 7", "chrome 8", "chrome 9", "chrome 10", "chrome 11", "chrome 12", "chrome 13", "chrome 14", "chrome 15", "chrome 16", "chrome 17", "chrome 18", "chrome 19", "chrome 20", "chrome 21", "chrome 22", "chrome 23", "chrome 24", "chrome 25", "chrome 26", "chrome 27", "chrome 28", "chrome 29", "chrome 30", "chrome 31", "chrome 32", "chrome 33", "chrome 34", "chrome 35", "ff 2", "ff 3", "ff 3.5", "ff 3.6", "ff 4", "ff 5", "ff 6", "ff 7", "ff 8", "ff 9", "ff 10", "ff 11", "ff 12", "ff 13", "ff 14", "ff 15", "ff 16", "ff 17", "ff 18", "ff 19", "ff 20", "ff 21", "ff 22", "ff 23", "opera 15", "opera 16", "opera 17", "opera 18", "opera 19", "opera 20", "opera 21", "safari 3.1", "safari 3.2", "safari 4", "safari 5", "safari 5.1", "safari 6", "safari 6.1", "safari 7"] + } + }; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/autoprefixer.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/autoprefixer.js new file mode 100644 index 00000000..cbbf547b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/autoprefixer.js @@ -0,0 +1,117 @@ +(function() { + var Autoprefixer, Browsers, Prefixes, autoprefixer, infoCache, postcss, + __slice = [].slice, + __bind = function(fn, me){ return function(){ return fn.apply(me, arguments); }; }; + + postcss = require('postcss'); + + Browsers = require('./browsers'); + + Prefixes = require('./prefixes'); + + infoCache = null; + + autoprefixer = function() { + var browsers, prefixes, reqs; + reqs = 1 <= arguments.length ? __slice.call(arguments, 0) : []; + if (reqs.length === 1 && reqs[0] instanceof Array) { + reqs = reqs[0]; + } else if (reqs.length === 0 || (reqs.length === 1 && (reqs[0] == null))) { + reqs = void 0; + } + if (reqs == null) { + reqs = autoprefixer["default"]; + } + browsers = new Browsers(autoprefixer.data.browsers, reqs); + prefixes = new Prefixes(autoprefixer.data.prefixes, browsers); + return new Autoprefixer(prefixes, autoprefixer.data); + }; + + autoprefixer.data = { + browsers: require('../data/browsers'), + prefixes: require('../data/prefixes') + }; + + Autoprefixer = (function() { + function Autoprefixer(prefixes, data) { + this.prefixes = prefixes; + this.data = data; + this.postcss = __bind(this.postcss, this); + this.browsers = this.prefixes.browsers.selected; + } + + Autoprefixer.prototype.process = function(str, options) { + if (options == null) { + options = {}; + } + return this.processor().process(str, options); + }; + + Autoprefixer.prototype.compile = function(str, options) { + var fixed, name, value; + if (options == null) { + options = {}; + } + fixed = {}; + for (name in options) { + value = options[name]; + if (name === 'file') { + name = 'from'; + } + fixed[name] = value; + } + if (typeof console !== "undefined" && console !== null) { + console.warn('autoprefixer: replace compile() to process(). ' + 'Method compile() is deprecated and will be removed in 1.1.'); + } + return this.process(str, fixed).css; + }; + + Autoprefixer.prototype.postcss = function(css) { + this.prefixes.processor.remove(css); + return this.prefixes.processor.add(css); + }; + + Autoprefixer.prototype.info = function() { + infoCache || (infoCache = require('./info')); + return infoCache(this.prefixes); + }; + + Autoprefixer.prototype.processor = function() { + return this.processorCache || (this.processorCache = postcss(this.postcss)); + }; + + return Autoprefixer; + + })(); + + autoprefixer["default"] = ['> 1%', 'last 2 versions', 'Firefox ESR', 'Opera 12.1']; + + autoprefixer.loadDefault = function() { + return this.defaultCache || (this.defaultCache = autoprefixer(this["default"])); + }; + + autoprefixer.process = function(str, options) { + if (options == null) { + options = {}; + } + return this.loadDefault().process(str, options); + }; + + autoprefixer.compile = function(str, options) { + if (options == null) { + options = {}; + } + return this.loadDefault().compile(str, options); + }; + + autoprefixer.postcss = function(css) { + return this.loadDefault().postcss(css); + }; + + autoprefixer.info = function() { + return this.loadDefault().info(); + }; + + module.exports = autoprefixer; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/binary.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/binary.js new file mode 100644 index 00000000..6c6bf271 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/binary.js @@ -0,0 +1,326 @@ +(function() { + var Binary, autoprefixer, fs, path; + + autoprefixer = require('./autoprefixer'); + + path = require('path'); + + fs = require('fs-extra'); + + Binary = (function() { + function Binary(process) { + this["arguments"] = process.argv.slice(2); + this.stdin = process.stdin; + this.stderr = process.stderr; + this.stdout = process.stdout; + this.status = 0; + this.command = 'compile'; + this.inputFiles = []; + this.parseArguments(); + } + + Binary.prototype.help = function() { + return 'Usage: autoprefixer [OPTION...] FILES\n\nParse CSS files and add prefixed properties and values.\n\nOptions:\n -b, --browsers BROWSERS add prefixes for selected browsers\n -o, --output FILE set output file\n -d, --dir DIR set output dir\n -m, --map generate source map\n -i, --info show selected browsers and properties\n -h, --help show help text\n -v, --version print program version'; + }; + + Binary.prototype.desc = function() { + return 'Files:\n If you didn\'t set input files, autoprefixer will read from stdin stream.\n\n By default, prefixed CSS will rewrite original files.\n\n You can specify output file or directory by `-o` argument.\n For several input files you can specify only output directory by `-d`.\n\n Output CSS will be written to stdout stream on `-o -\' argument or stdin input.\n\nSource maps:\n On `-m` argument Autoprefixer will generate source map for changes near\n output CSS (for out/main.css it generates out/main.css.map).\n\n If previous source map will be near input files (for example, in/main.css\n and in/main.css.map) Autoprefixer will apply previous map to output\n source map.\n\nBrowsers:\n Separate browsers by comma. For example, `-b "> 1%, opera 12"\'.\n You can set browsers by global usage statictics: `-b \"> 1%\"\'.\n or last version: `-b "last 2 versions"\'.'; + }; + + Binary.prototype.print = function(str) { + str = str.replace(/\n$/, ''); + return this.stdout.write(str + "\n"); + }; + + Binary.prototype.error = function(str) { + this.status = 1; + return this.stderr.write(str + "\n"); + }; + + Binary.prototype.version = function() { + return require('../package.json').version; + }; + + Binary.prototype.parseArguments = function() { + var arg, args; + args = this["arguments"].slice(); + while (args.length > 0) { + arg = args.shift(); + switch (arg) { + case '-h': + case '--help': + this.command = 'showHelp'; + break; + case '-v': + case '--version': + this.command = 'showVersion'; + break; + case '-i': + case '--info': + this.command = 'info'; + break; + case '-u': + case '--update': + this.command = 'update'; + break; + case '-m': + case '--map': + this.sourceMap = true; + break; + case '-b': + case '--browsers': + this.requirements = args.shift().split(',').map(function(i) { + return i.trim(); + }); + break; + case '-o': + case '--output': + this.outputFile = args.shift(); + break; + case '-d': + case '--dir': + this.outputDir = args.shift(); + break; + default: + if (arg.match(/^-\w$/) || arg.match(/^--\w[\w-]+$/)) { + this.command = void 0; + this.error("autoprefixer: Unknown argument " + arg); + this.error(''); + this.error(this.help()); + } else { + this.inputFiles.push(arg); + } + } + } + }; + + Binary.prototype.showHelp = function(done) { + this.print(this.help()); + this.print(''); + this.print(this.desc()); + return done(); + }; + + Binary.prototype.showVersion = function(done) { + this.print("autoprefixer " + (this.version())); + return done(); + }; + + Binary.prototype.info = function(done) { + this.print(this.compiler().info()); + return done(); + }; + + Binary.prototype.update = function(done) { + var coffee, updater; + try { + coffee = require('coffee-script'); + } catch (_error) { + this.error("Install coffee-script npm package"); + return done(); + } + updater = require('./updater'); + updater.request((function(_this) { + return function() { + return _this.stdout.write('.'); + }; + })(this)); + updater.done((function(_this) { + return function() { + _this.print(''); + if (updater.changed.length === 0) { + _this.print('Everything up-to-date'); + } else { + _this.print("Update " + (updater.changed.join(' and ')) + " data"); + } + return done(); + }; + })(this)); + return updater.run(); + }; + + Binary.prototype.startWork = function() { + return this.waiting += 1; + }; + + Binary.prototype.endWork = function() { + this.waiting -= 1; + if (this.waiting <= 0) { + return this.doneCallback(); + } + }; + + Binary.prototype.workError = function(str) { + this.error(str); + return this.endWork(); + }; + + Binary.prototype.compiler = function() { + return this.compilerCache || (this.compilerCache = autoprefixer(this.requirements)); + }; + + Binary.prototype.compileCSS = function(css, output, input) { + var error, opts, result; + opts = {}; + if (input) { + opts.from = input; + } + if (output !== '-') { + opts.to = output; + } + if (this.sourceMap) { + opts.map = true; + } + if (opts.map && input && fs.existsSync(input + '.map')) { + opts.map = fs.readFileSync(input + '.map').toString(); + } + try { + result = this.compiler().process(css, opts); + } catch (_error) { + error = _error; + if (error.autoprefixer || error.message.match(/^Can't parse CSS/)) { + this.error("autoprefixer: " + error.message); + } else { + this.error('autoprefixer: Internal error'); + } + if (error.css || !error.autoprefixer) { + if (error.stack != null) { + this.error(''); + this.error(error.stack); + } + } + } + if (result == null) { + return this.endWork(); + } + if (output === '-') { + this.print(result.css); + return this.endWork(); + } else { + return fs.outputFile(output, result.css, (function(_this) { + return function(error) { + if (error) { + _this.error("autoprefixer: " + error); + } + if (result.map) { + return fs.writeFile(output + '.map', result.map, function(error) { + if (error) { + _this.error("autoprefixer: " + error); + } + return _this.endWork(); + }); + } else { + return _this.endWork(); + } + }; + })(this)); + } + }; + + Binary.prototype.files = function() { + var file, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results, _results1, _results2; + if (this.inputFiles.length === 0) { + this.outputFile || (this.outputFile = '-'); + } + if (this.outputDir) { + if (this.inputFiles.length === 0) { + this.error("autoprefixer: For STDIN input you need to specify output file (by `-o FILE`),\nnot output dir"); + return; + } + if (fs.existsSync(this.outputDir) && !fs.statSync(this.outputDir).isDirectory()) { + this.error("autoprefixer: Path " + this.outputDir + " is a file, not directory"); + return; + } + _ref = this.inputFiles; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + file = _ref[_i]; + _results.push([file, path.join(this.outputDir, path.basename(file))]); + } + return _results; + } else if (this.outputFile) { + if (this.inputFiles.length > 1) { + this.error("autoprefixer: For several files you can specify only output dir (by `-d DIR`),\nnot one output file"); + return; + } + _ref1 = this.inputFiles; + _results1 = []; + for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { + file = _ref1[_j]; + _results1.push([file, this.outputFile]); + } + return _results1; + } else { + _ref2 = this.inputFiles; + _results2 = []; + for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) { + file = _ref2[_k]; + _results2.push([file, file]); + } + return _results2; + } + }; + + Binary.prototype.compile = function(done) { + var css, file, files, input, output, _fn, _i, _j, _len, _len1, _ref; + this.waiting = 0; + this.doneCallback = done; + files = this.files(); + if (!files) { + return done(); + } + if (files.length === 0) { + this.startWork(); + css = ''; + this.stdin.resume(); + this.stdin.on('data', function(chunk) { + return css += chunk; + }); + return this.stdin.on('end', (function(_this) { + return function() { + return _this.compileCSS(css, _this.outputFile); + }; + })(this)); + } else { + for (_i = 0, _len = files.length; _i < _len; _i++) { + file = files[_i]; + this.startWork(); + } + _fn = (function(_this) { + return function(input, output) { + return fs.readFile(input, function(error, css) { + if (error) { + return _this.workError("autoprefixer: " + error.message); + } else { + return _this.compileCSS(css, output, input); + } + }); + }; + })(this); + for (_j = 0, _len1 = files.length; _j < _len1; _j++) { + _ref = files[_j], input = _ref[0], output = _ref[1]; + if (!fs.existsSync(input)) { + this.workError("autoprefixer: File " + input + " doesn't exists"); + continue; + } + _fn(input, output); + } + return false; + } + }; + + Binary.prototype.run = function(done) { + if (this.command) { + return this[this.command](done); + } else { + return done(); + } + }; + + return Binary; + + })(); + + module.exports = Binary; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/browsers.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/browsers.js new file mode 100644 index 00000000..a8b8b3c5 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/browsers.js @@ -0,0 +1,190 @@ +(function() { + var Browsers, utils; + + utils = require('./utils'); + + Browsers = (function() { + Browsers.prefixes = function() { + var data, i, name; + if (this.prefixesCache) { + return this.prefixesCache; + } + data = require('../data/browsers'); + return this.prefixesCache = utils.uniq((function() { + var _results; + _results = []; + for (name in data) { + i = data[name]; + _results.push(i.prefix); + } + return _results; + })()).sort(function(a, b) { + return b.length - a.length; + }); + }; + + function Browsers(data, requirements) { + this.data = data; + this.selected = this.parse(requirements); + } + + Browsers.prototype.parse = function(requirements) { + var selected; + if (!(requirements instanceof Array)) { + requirements = [requirements]; + } + selected = []; + requirements.map((function(_this) { + return function(req) { + var i, match, name, _ref; + _ref = _this.requirements; + for (name in _ref) { + i = _ref[name]; + if (match = req.match(i.regexp)) { + selected = selected.concat(i.select.apply(_this, match.slice(1))); + return; + } + } + return utils.error("Unknown browser requirement `" + req + "`"); + }; + })(this)); + return utils.uniq(selected); + }; + + Browsers.prototype.aliases = { + fx: 'ff', + firefox: 'ff', + explorer: 'ie', + blackberry: 'bb' + }; + + Browsers.prototype.requirements = { + none: { + regexp: /^none$/i, + select: function() { + return []; + } + }, + lastVersions: { + regexp: /^last (\d+) versions?$/i, + select: function(versions) { + return this.browsers(function(data) { + if (data.minor) { + return []; + } else { + return data.versions.slice(0, versions); + } + }); + } + }, + lastByBrowser: { + regexp: /^last (\d+) (\w+) versions?$/i, + select: function(versions, browser) { + var data; + data = this.byName(browser); + return data.versions.slice(0, versions).map(function(v) { + return "" + data.name + " " + v; + }); + } + }, + globalStatistics: { + regexp: /^> (\d+(\.\d+)?)%$/, + select: function(popularity) { + return this.browsers(function(data) { + return data.versions.filter(function(version, i) { + return data.popularity[i] > popularity; + }); + }); + } + }, + newerThen: { + regexp: /^(\w+) (>=?)\s*([\d\.]+)/, + select: function(browser, sign, version) { + var data, filter; + data = this.byName(browser); + version = parseFloat(version); + if (sign === '>') { + filter = function(v) { + return v > version; + }; + } else if (sign === '>=') { + filter = function(v) { + return v >= version; + }; + } + return data.versions.filter(filter).map(function(v) { + return "" + data.name + " " + v; + }); + } + }, + esr: { + regexp: /^(firefox|ff|fx) esr$/i, + select: function() { + return ['ff 24']; + } + }, + direct: { + regexp: /^(\w+) ([\d\.]+)$/, + select: function(browser, version) { + var data, first, last; + data = this.byName(browser); + version = parseFloat(version); + last = data.future ? data.future[0] : data.versions[0]; + first = data.versions[data.versions.length - 1]; + if (version > last) { + version = last; + } else if (version < first) { + version = first; + } + return ["" + data.name + " " + version]; + } + } + }; + + Browsers.prototype.browsers = function(criteria) { + var browser, data, selected, versions, _ref; + selected = []; + _ref = this.data; + for (browser in _ref) { + data = _ref[browser]; + versions = criteria(data).map(function(version) { + return "" + browser + " " + version; + }); + selected = selected.concat(versions); + } + return selected; + }; + + Browsers.prototype.prefix = function(browser) { + var name, version, _ref; + _ref = browser.split(' '), name = _ref[0], version = _ref[1]; + if (name === 'opera' && parseFloat(version) >= 15) { + return '-webkit-'; + } else { + return this.data[name].prefix; + } + }; + + Browsers.prototype.isSelected = function(browser) { + return this.selected.indexOf(browser) !== -1; + }; + + Browsers.prototype.byName = function(name) { + var data; + name = name.toLowerCase(); + name = this.aliases[name] || name; + data = this.data[name]; + if (!data) { + utils.error("Unknown browser " + browser); + } + data.name = name; + return data; + }; + + return Browsers; + + })(); + + module.exports = Browsers; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/declaration.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/declaration.js new file mode 100644 index 00000000..439a9050 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/declaration.js @@ -0,0 +1,81 @@ +(function() { + var Browsers, Declaration, Prefixer, vendor, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Prefixer = require('./prefixer'); + + Browsers = require('./browsers'); + + vendor = require('postcss/lib/vendor'); + + Declaration = (function(_super) { + __extends(Declaration, _super); + + function Declaration() { + return Declaration.__super__.constructor.apply(this, arguments); + } + + Declaration.prototype.check = function(decl) { + return true; + }; + + Declaration.prototype.prefixed = function(prop, prefix) { + return prefix + prop; + }; + + Declaration.prototype.normalize = function(prop) { + return prop; + }; + + Declaration.prototype.otherPrefixes = function(value, prefix) { + var other, _i, _len, _ref; + _ref = Browsers.prefixes(); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + other = _ref[_i]; + if (other === prefix) { + continue; + } + if (value.indexOf(other) !== -1) { + return true; + } + } + return false; + }; + + Declaration.prototype.set = function(decl, prefix) { + decl.prop = this.prefixed(decl.prop, prefix); + return decl; + }; + + Declaration.prototype.insert = function(decl, prefix) { + var cloned; + cloned = this.set(this.clone(decl), prefix); + if (cloned) { + return decl.parent.insertBefore(decl, cloned); + } + }; + + Declaration.prototype.add = function(decl, prefix) { + var already, prefixed; + prefixed = this.prefixed(decl.prop, prefix); + already = this.all.group(decl).up(function(i) { + return i.prop === prefixed; + }); + if (already || this.otherPrefixes(decl.value, prefix)) { + return; + } + return this.insert(decl, prefix); + }; + + Declaration.prototype.old = function(prop, prefix) { + return [this.prefixed(prop, prefix)]; + }; + + return Declaration; + + })(Prefixer); + + module.exports = Declaration; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-content.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-content.js new file mode 100644 index 00000000..74885370 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-content.js @@ -0,0 +1,57 @@ +(function() { + var AlignContent, Declaration, flexSpec, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + AlignContent = (function(_super) { + __extends(AlignContent, _super); + + function AlignContent() { + return AlignContent.__super__.constructor.apply(this, arguments); + } + + AlignContent.names = ['align-content', 'flex-line-pack']; + + AlignContent.oldValues = { + 'flex-end': 'end', + 'flex-start': 'start', + 'space-between': 'justify', + 'space-around': 'distribute' + }; + + AlignContent.prototype.prefixed = function(prop, prefix) { + var spec, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2012) { + return prefix + 'flex-line-pack'; + } else { + return AlignContent.__super__.prefixed.apply(this, arguments); + } + }; + + AlignContent.prototype.normalize = function(prop) { + return 'align-content'; + }; + + AlignContent.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2012) { + decl.value = AlignContent.oldValues[decl.value] || decl.value; + return AlignContent.__super__.set.call(this, decl, prefix); + } else if (spec === 'final') { + return AlignContent.__super__.set.apply(this, arguments); + } + }; + + return AlignContent; + + })(Declaration); + + module.exports = AlignContent; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-items.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-items.js new file mode 100644 index 00000000..71144d55 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-items.js @@ -0,0 +1,57 @@ +(function() { + var AlignItems, Declaration, flexSpec, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + AlignItems = (function(_super) { + __extends(AlignItems, _super); + + function AlignItems() { + return AlignItems.__super__.constructor.apply(this, arguments); + } + + AlignItems.names = ['align-items', 'flex-align', 'box-align']; + + AlignItems.oldValues = { + 'flex-end': 'end', + 'flex-start': 'start' + }; + + AlignItems.prototype.prefixed = function(prop, prefix) { + var spec, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2009) { + return prefix + 'box-align'; + } else if (spec === 2012) { + return prefix + 'flex-align'; + } else { + return AlignItems.__super__.prefixed.apply(this, arguments); + } + }; + + AlignItems.prototype.normalize = function(prop) { + return 'align-items'; + }; + + AlignItems.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2009 || spec === 2012) { + decl.value = AlignItems.oldValues[decl.value] || decl.value; + return AlignItems.__super__.set.call(this, decl, prefix); + } else { + return AlignItems.__super__.set.apply(this, arguments); + } + }; + + return AlignItems; + + })(Declaration); + + module.exports = AlignItems; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-self.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-self.js new file mode 100644 index 00000000..fa7e81ce --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/align-self.js @@ -0,0 +1,55 @@ +(function() { + var AlignSelf, Declaration, flexSpec, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + AlignSelf = (function(_super) { + __extends(AlignSelf, _super); + + function AlignSelf() { + return AlignSelf.__super__.constructor.apply(this, arguments); + } + + AlignSelf.names = ['align-self', 'flex-item-align']; + + AlignSelf.oldValues = { + 'flex-end': 'end', + 'flex-start': 'start' + }; + + AlignSelf.prototype.prefixed = function(prop, prefix) { + var spec, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2012) { + return prefix + 'flex-item-align'; + } else { + return AlignSelf.__super__.prefixed.apply(this, arguments); + } + }; + + AlignSelf.prototype.normalize = function(prop) { + return 'align-self'; + }; + + AlignSelf.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2012) { + decl.value = AlignSelf.oldValues[decl.value] || decl.value; + return AlignSelf.__super__.set.call(this, decl, prefix); + } else if (spec === 'final') { + return AlignSelf.__super__.set.apply(this, arguments); + } + }; + + return AlignSelf; + + })(Declaration); + + module.exports = AlignSelf; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/border-image.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/border-image.js new file mode 100644 index 00000000..95b430fa --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/border-image.js @@ -0,0 +1,28 @@ +(function() { + var BorderImage, Declaration, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Declaration = require('../declaration'); + + BorderImage = (function(_super) { + __extends(BorderImage, _super); + + function BorderImage() { + return BorderImage.__super__.constructor.apply(this, arguments); + } + + BorderImage.names = ['border-image']; + + BorderImage.prototype.set = function(decl, prefix) { + decl.value = decl.value.replace(/\s+fill(\s)/, '$1'); + return BorderImage.__super__.set.call(this, decl, prefix); + }; + + return BorderImage; + + })(Declaration); + + module.exports = BorderImage; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/border-radius.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/border-radius.js new file mode 100644 index 00000000..97bcfa31 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/border-radius.js @@ -0,0 +1,56 @@ +(function() { + var BorderRadius, Declaration, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Declaration = require('../declaration'); + + BorderRadius = (function(_super) { + var hor, mozilla, normal, ver, _i, _j, _len, _len1, _ref, _ref1; + + __extends(BorderRadius, _super); + + function BorderRadius() { + return BorderRadius.__super__.constructor.apply(this, arguments); + } + + BorderRadius.names = ['border-radius']; + + BorderRadius.toMozilla = {}; + + BorderRadius.toNormal = {}; + + _ref = ['top', 'bottom']; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + ver = _ref[_i]; + _ref1 = ['left', 'right']; + for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { + hor = _ref1[_j]; + normal = "border-" + ver + "-" + hor + "-radius"; + mozilla = "border-radius-" + ver + hor; + BorderRadius.names.push(normal); + BorderRadius.names.push(mozilla); + BorderRadius.toMozilla[normal] = mozilla; + BorderRadius.toNormal[mozilla] = normal; + } + } + + BorderRadius.prototype.prefixed = function(prop, prefix) { + if (prefix === '-moz-') { + return prefix + (BorderRadius.toMozilla[prop] || prop); + } else { + return BorderRadius.__super__.prefixed.apply(this, arguments); + } + }; + + BorderRadius.prototype.normalize = function(prop) { + return BorderRadius.toNormal[prop] || prop; + }; + + return BorderRadius; + + })(Declaration); + + module.exports = BorderRadius; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/display-flex.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/display-flex.js new file mode 100644 index 00000000..4529e356 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/display-flex.js @@ -0,0 +1,70 @@ +(function() { + var DisplayFlex, OldDisplayFlex, OldValue, Value, flexSpec, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + flexSpec = require('./flex-spec'); + + OldValue = require('../old-value'); + + Value = require('../value'); + + OldDisplayFlex = (function(_super) { + __extends(OldDisplayFlex, _super); + + function OldDisplayFlex(name) { + this.name = name; + } + + OldDisplayFlex.prototype.check = function(value) { + return value === this.name; + }; + + return OldDisplayFlex; + + })(OldValue); + + DisplayFlex = (function(_super) { + __extends(DisplayFlex, _super); + + DisplayFlex.names = ['display-flex', 'inline-flex']; + + function DisplayFlex(name, prefixes) { + DisplayFlex.__super__.constructor.apply(this, arguments); + if (name === 'display-flex') { + this.name = 'flex'; + } + } + + DisplayFlex.prototype.check = function(decl) { + return decl.value === this.name; + }; + + DisplayFlex.prototype.prefixed = function(prefix) { + var spec, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2009 && this.name === 'inline-flex') { + return; + } + return prefix + (spec === 2009 ? 'box' : spec === 2012 ? this.name === 'flex' ? 'flexbox' : 'inline-flexbox' : spec === 'final' ? this.name : void 0); + }; + + DisplayFlex.prototype.replace = function(string, prefix) { + return this.prefixed(prefix); + }; + + DisplayFlex.prototype.old = function(prefix) { + var prefixed; + prefixed = this.prefixed(prefix); + if (prefixed) { + return new OldValue(prefixed); + } + }; + + return DisplayFlex; + + })(Value); + + module.exports = DisplayFlex; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/fill-available.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/fill-available.js new file mode 100644 index 00000000..f9594652 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/fill-available.js @@ -0,0 +1,41 @@ +(function() { + var FillAvailable, OldValue, Value, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + OldValue = require('../old-value'); + + Value = require('../value'); + + FillAvailable = (function(_super) { + __extends(FillAvailable, _super); + + function FillAvailable() { + return FillAvailable.__super__.constructor.apply(this, arguments); + } + + FillAvailable.names = ['fill-available']; + + FillAvailable.prototype.replace = function(string, prefix) { + if (prefix === '-moz-') { + return string.replace(this.regexp(), '$1-moz-available$3'); + } else { + return FillAvailable.__super__.replace.apply(this, arguments); + } + }; + + FillAvailable.prototype.old = function(prefix) { + if (prefix === '-moz-') { + return new OldValue('-moz-available'); + } else { + return FillAvailable.__super__.old.apply(this, arguments); + } + }; + + return FillAvailable; + + })(Value); + + module.exports = FillAvailable; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/filter.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/filter.js new file mode 100644 index 00000000..7a109a78 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/filter.js @@ -0,0 +1,29 @@ +(function() { + var Declaration, Filter, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Declaration = require('../declaration'); + + Filter = (function(_super) { + __extends(Filter, _super); + + function Filter() { + return Filter.__super__.constructor.apply(this, arguments); + } + + Filter.names = ['filter']; + + Filter.prototype.check = function(decl) { + var v; + v = decl.value; + return v.toLowerCase().indexOf('alpha(') === -1 && v.indexOf('DXImageTransform.Microsoft') === -1; + }; + + return Filter; + + })(Declaration); + + module.exports = Filter; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-basis.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-basis.js new file mode 100644 index 00000000..4231c0fe --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-basis.js @@ -0,0 +1,51 @@ +(function() { + var Declaration, FlexBasis, flexSpec, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexBasis = (function(_super) { + __extends(FlexBasis, _super); + + function FlexBasis() { + return FlexBasis.__super__.constructor.apply(this, arguments); + } + + FlexBasis.names = ['flex-basis']; + + FlexBasis.prototype.normalize = function() { + return 'flex'; + }; + + FlexBasis.prototype.prefixed = function(prop, prefix) { + var spec, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2012) { + return prefix + 'flex'; + } else { + return FlexBasis.__super__.prefixed.apply(this, arguments); + } + }; + + FlexBasis.prototype.set = function(decl, prefix) { + var spec, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2012) { + decl.prop = prefix + 'flex'; + decl.value = '0 1 ' + decl.value; + return decl; + } else if (spec === 'final') { + return FlexBasis.__super__.set.apply(this, arguments); + } + }; + + return FlexBasis; + + })(Declaration); + + module.exports = FlexBasis; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-direction.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-direction.js new file mode 100644 index 00000000..d4ec3036 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-direction.js @@ -0,0 +1,65 @@ +(function() { + var Declaration, FlexDirection, flexSpec, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexDirection = (function(_super) { + __extends(FlexDirection, _super); + + function FlexDirection() { + return FlexDirection.__super__.constructor.apply(this, arguments); + } + + FlexDirection.names = ['flex-direction', 'box-direction', 'box-orient']; + + FlexDirection.prototype.normalize = function(prop) { + return 'flex-direction'; + }; + + FlexDirection.prototype.insert = function(decl, prefix) { + var already, cloned, dir, orient, spec, value, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2009) { + already = decl.parent.some(function(i) { + return i.prop === prefix + 'box-orient' || i.prop === prefix + 'box-direction'; + }); + if (already) { + return; + } + value = decl.value; + orient = value.indexOf('row') !== -1 ? 'horizontal' : 'vertical'; + dir = value.indexOf('reverse') !== -1 ? 'reverse' : 'normal'; + cloned = this.clone(decl); + cloned.prop = prefix + 'box-orient'; + cloned.value = orient; + decl.parent.insertBefore(decl, cloned); + cloned = this.clone(decl); + cloned.prop = prefix + 'box-direction'; + cloned.value = dir; + return decl.parent.insertBefore(decl, cloned); + } else { + return FlexDirection.__super__.insert.apply(this, arguments); + } + }; + + FlexDirection.prototype.old = function(prop, prefix) { + var spec, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2009) { + return [prefix + 'box-orient', prefix + 'box-direction']; + } else { + return FlexDirection.__super__.old.apply(this, arguments); + } + }; + + return FlexDirection; + + })(Declaration); + + module.exports = FlexDirection; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-flow.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-flow.js new file mode 100644 index 00000000..011199b4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-flow.js @@ -0,0 +1,35 @@ +(function() { + var Declaration, FlexFlow, flexSpec, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexFlow = (function(_super) { + __extends(FlexFlow, _super); + + function FlexFlow() { + return FlexFlow.__super__.constructor.apply(this, arguments); + } + + FlexFlow.names = ['flex-flow']; + + FlexFlow.prototype.set = function(decl, prefix) { + var spec, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2012) { + return FlexFlow.__super__.set.apply(this, arguments); + } else if (spec === 'final') { + return FlexFlow.__super__.set.apply(this, arguments); + } + }; + + return FlexFlow; + + })(Declaration); + + module.exports = FlexFlow; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-grow.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-grow.js new file mode 100644 index 00000000..c275f15b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-grow.js @@ -0,0 +1,41 @@ +(function() { + var Declaration, Flex, flexSpec, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + Flex = (function(_super) { + __extends(Flex, _super); + + function Flex() { + return Flex.__super__.constructor.apply(this, arguments); + } + + Flex.names = ['flex-grow']; + + Flex.prototype.normalize = function() { + return 'flex'; + }; + + Flex.prototype.prefixed = function(prop, prefix) { + var spec, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2009) { + return prefix + 'box-flex'; + } else if (spec === 2012) { + return prefix + 'flex'; + } else { + return Flex.__super__.prefixed.apply(this, arguments); + } + }; + + return Flex; + + })(Declaration); + + module.exports = Flex; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-shrink.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-shrink.js new file mode 100644 index 00000000..d7bd77e5 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-shrink.js @@ -0,0 +1,51 @@ +(function() { + var Declaration, FlexShrink, flexSpec, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexShrink = (function(_super) { + __extends(FlexShrink, _super); + + function FlexShrink() { + return FlexShrink.__super__.constructor.apply(this, arguments); + } + + FlexShrink.names = ['flex-shrink']; + + FlexShrink.prototype.normalize = function() { + return 'flex'; + }; + + FlexShrink.prototype.prefixed = function(prop, prefix) { + var spec, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2012) { + return prefix + 'flex'; + } else { + return FlexShrink.__super__.prefixed.apply(this, arguments); + } + }; + + FlexShrink.prototype.set = function(decl, prefix) { + var spec, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2012) { + decl.prop = prefix + 'flex'; + decl.value = '0 ' + decl.value; + return decl; + } else if (spec === 'final') { + return FlexShrink.__super__.set.apply(this, arguments); + } + }; + + return FlexShrink; + + })(Declaration); + + module.exports = FlexShrink; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-spec.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-spec.js new file mode 100644 index 00000000..59ec38e9 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-spec.js @@ -0,0 +1,11 @@ +(function() { + module.exports = function(prefix) { + var spec; + spec = prefix === '-webkit- 2009' || prefix === '-moz-' ? 2009 : prefix === '-ms-' ? 2012 : prefix === '-webkit-' ? 'final' : void 0; + if (prefix === '-webkit- 2009') { + prefix = '-webkit-'; + } + return [spec, prefix]; + }; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-wrap.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-wrap.js new file mode 100644 index 00000000..f7ffddc8 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex-wrap.js @@ -0,0 +1,33 @@ +(function() { + var Declaration, FlexWrap, flexSpec, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + FlexWrap = (function(_super) { + __extends(FlexWrap, _super); + + function FlexWrap() { + return FlexWrap.__super__.constructor.apply(this, arguments); + } + + FlexWrap.names = ['flex-wrap']; + + FlexWrap.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec !== 2009) { + return FlexWrap.__super__.set.apply(this, arguments); + } + }; + + return FlexWrap; + + })(Declaration); + + module.exports = FlexWrap; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex.js new file mode 100644 index 00000000..8ad2e0b5 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/flex.js @@ -0,0 +1,50 @@ +(function() { + var Declaration, Flex, flexSpec, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + Flex = (function(_super) { + __extends(Flex, _super); + + function Flex() { + return Flex.__super__.constructor.apply(this, arguments); + } + + Flex.names = ['flex', 'box-flex']; + + Flex.prototype.prefixed = function(prop, prefix) { + var spec, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2009) { + return prefix + 'box-flex'; + } else { + return Flex.__super__.prefixed.apply(this, arguments); + } + }; + + Flex.prototype.normalize = function(prop) { + return 'flex'; + }; + + Flex.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2009) { + decl.value = decl.value.split(' ')[0]; + return Flex.__super__.set.call(this, decl, prefix); + } else { + return Flex.__super__.set.apply(this, arguments); + } + }; + + return Flex; + + })(Declaration); + + module.exports = Flex; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/fullscreen.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/fullscreen.js new file mode 100644 index 00000000..f8a601f5 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/fullscreen.js @@ -0,0 +1,33 @@ +(function() { + var Fullscreen, Selector, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Selector = require('../selector'); + + Fullscreen = (function(_super) { + __extends(Fullscreen, _super); + + function Fullscreen() { + return Fullscreen.__super__.constructor.apply(this, arguments); + } + + Fullscreen.names = [':fullscreen']; + + Fullscreen.prototype.prefixed = function(prefix) { + if ('-webkit-' === prefix) { + return ':-webkit-full-screen'; + } else if ('-moz-' === prefix) { + return ':-moz-full-screen'; + } else { + return ":" + prefix + "fullscreen"; + } + }; + + return Fullscreen; + + })(Selector); + + module.exports = Fullscreen; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/gradient.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/gradient.js new file mode 100644 index 00000000..3701fbce --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/gradient.js @@ -0,0 +1,213 @@ +(function() { + var Gradient, OldValue, Value, isDirection, list, utils, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + OldValue = require('../old-value'); + + Value = require('../value'); + + utils = require('../utils'); + + list = require('postcss/lib/list'); + + isDirection = /top|left|right|bottom/gi; + + Gradient = (function(_super) { + __extends(Gradient, _super); + + function Gradient() { + return Gradient.__super__.constructor.apply(this, arguments); + } + + Gradient.names = ['linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient']; + + Gradient.prototype.replace = function(string, prefix) { + var values; + values = list.comma(string).map((function(_this) { + return function(value) { + var after, args, close, params; + if (value.slice(0, +_this.name.length + 1 || 9e9) !== _this.name + '(') { + return value; + } + close = value.lastIndexOf(')'); + after = value.slice(close + 1); + args = value.slice(_this.name.length + 1, +(close - 1) + 1 || 9e9); + params = list.comma(args); + params = _this.newDirection(params); + if (prefix === '-webkit- old') { + return _this.oldWebkit(value, args, params, after); + } else { + _this.convertDirection(params); + return prefix + _this.name + '(' + params.join(', ') + ')' + after; + } + }; + })(this)); + return values.join(', '); + }; + + Gradient.prototype.directions = { + top: 'bottom', + left: 'right', + bottom: 'top', + right: 'left' + }; + + Gradient.prototype.oldDirections = { + 'top': 'left bottom, left top', + 'left': 'right top, left top', + 'bottom': 'left top, left bottom', + 'right': 'left top, right top', + 'top right': 'left bottom, right top', + 'top left': 'right bottom, left top', + 'bottom right': 'left top, right bottom', + 'bottom left': 'right top, left bottom' + }; + + Gradient.prototype.newDirection = function(params) { + var first, value; + first = params[0]; + if (first.indexOf('to ') === -1 && isDirection.test(first)) { + first = first.split(' '); + first = (function() { + var _i, _len, _results; + _results = []; + for (_i = 0, _len = first.length; _i < _len; _i++) { + value = first[_i]; + _results.push(this.directions[value.toLowerCase()] || value); + } + return _results; + }).call(this); + params[0] = 'to ' + first.join(' '); + } + return params; + }; + + Gradient.prototype.oldWebkit = function(value, args, params, after) { + if (this.name !== 'linear-gradient') { + return value; + } + if (params[0] && params[0].indexOf('deg') !== -1) { + return value; + } + if (args.indexOf('-corner') !== -1) { + return value; + } + if (args.indexOf('-side') !== -1) { + return value; + } + params = this.oldDirection(params); + params = this.colorStops(params); + return '-webkit-gradient(linear, ' + params.join(', ') + ')' + after; + }; + + Gradient.prototype.convertDirection = function(params) { + if (params.length > 0) { + if (params[0].slice(0, 3) === 'to ') { + return params[0] = this.fixDirection(params[0]); + } else if (params[0].indexOf('deg') !== -1) { + return params[0] = this.fixAngle(params[0]); + } else if (params[0].indexOf(' at ') !== -1) { + return this.fixRadial(params); + } + } + }; + + Gradient.prototype.fixDirection = function(param) { + var value; + param = param.split(' '); + param.splice(0, 1); + param = (function() { + var _i, _len, _results; + _results = []; + for (_i = 0, _len = param.length; _i < _len; _i++) { + value = param[_i]; + _results.push(this.directions[value.toLowerCase()] || value); + } + return _results; + }).call(this); + return param.join(' '); + }; + + Gradient.prototype.roundFloat = function(float, digits) { + return parseFloat(float.toFixed(digits)); + }; + + Gradient.prototype.fixAngle = function(param) { + param = parseFloat(param); + param = Math.abs(450 - param) % 360; + param = this.roundFloat(param, 3); + return "" + param + "deg"; + }; + + Gradient.prototype.oldDirection = function(params) { + var direction; + if (params.length === 0) { + params; + } + if (params[0].indexOf('to ') !== -1) { + direction = params[0].replace(/^to\s+/, ''); + direction = this.oldDirections[direction]; + params[0] = direction; + return params; + } else { + direction = this.oldDirections.bottom; + return [direction].concat(params); + } + }; + + Gradient.prototype.colorStops = function(params) { + return params.map(function(param, i) { + var color, position, separator; + if (i === 0) { + return param; + } + separator = param.lastIndexOf(' '); + if (separator === -1) { + color = param; + position = void 0; + } else { + color = param.slice(0, separator); + position = param.slice(separator + 1); + } + if (position && position.indexOf(')') !== -1) { + color += ' ' + position; + position = void 0; + } + if (i === 1) { + return "from(" + color + ")"; + } else if (i === params.length - 1) { + return "to(" + color + ")"; + } else if (position) { + return "color-stop(" + position + ", " + color + ")"; + } else { + return "color-stop(" + color + ")"; + } + }); + }; + + Gradient.prototype.fixRadial = function(params) { + var first; + first = params[0].split(/\s+at\s+/); + return params.splice(0, 1, first[1], first[0]); + }; + + Gradient.prototype.old = function(prefix) { + var regexp, string, type; + if (prefix === '-webkit-') { + type = this.name === 'linear-gradient' ? 'linear' : 'radial'; + string = '-gradient'; + regexp = utils.regexp("-webkit-(" + type + "-gradient|gradient\\(\\s*" + type + ")", false); + return new OldValue(prefix + this.name, string, regexp); + } else { + return Gradient.__super__.old.apply(this, arguments); + } + }; + + return Gradient; + + })(Value); + + module.exports = Gradient; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/justify-content.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/justify-content.js new file mode 100644 index 00000000..1a7554b8 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/justify-content.js @@ -0,0 +1,62 @@ +(function() { + var Declaration, JustifyContent, flexSpec, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + JustifyContent = (function(_super) { + __extends(JustifyContent, _super); + + function JustifyContent() { + return JustifyContent.__super__.constructor.apply(this, arguments); + } + + JustifyContent.names = ['justify-content', 'flex-pack', 'box-pack']; + + JustifyContent.oldValues = { + 'flex-end': 'end', + 'flex-start': 'start', + 'space-between': 'justify', + 'space-around': 'distribute' + }; + + JustifyContent.prototype.prefixed = function(prop, prefix) { + var spec, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2009) { + return prefix + 'box-pack'; + } else if (spec === 2012) { + return prefix + 'flex-pack'; + } else { + return JustifyContent.__super__.prefixed.apply(this, arguments); + } + }; + + JustifyContent.prototype.normalize = function(prop) { + return 'justify-content'; + }; + + JustifyContent.prototype.set = function(decl, prefix) { + var spec, value; + spec = flexSpec(prefix)[0]; + if (spec === 2009 || spec === 2012) { + value = JustifyContent.oldValues[decl.value] || decl.value; + decl.value = value; + if (spec !== 2009 || value !== 'distribute') { + return JustifyContent.__super__.set.call(this, decl, prefix); + } + } else if (spec === 'final') { + return JustifyContent.__super__.set.apply(this, arguments); + } + }; + + return JustifyContent; + + })(Declaration); + + module.exports = JustifyContent; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/order.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/order.js new file mode 100644 index 00000000..4a1c619c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/order.js @@ -0,0 +1,52 @@ +(function() { + var Declaration, Order, flexSpec, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + flexSpec = require('./flex-spec'); + + Declaration = require('../declaration'); + + Order = (function(_super) { + __extends(Order, _super); + + function Order() { + return Order.__super__.constructor.apply(this, arguments); + } + + Order.names = ['order', 'flex-order', 'box-ordinal-group']; + + Order.prototype.prefixed = function(prop, prefix) { + var spec, _ref; + _ref = flexSpec(prefix), spec = _ref[0], prefix = _ref[1]; + if (spec === 2009) { + return prefix + 'box-ordinal-group'; + } else if (spec === 2012) { + return prefix + 'flex-order'; + } else { + return Order.__super__.prefixed.apply(this, arguments); + } + }; + + Order.prototype.normalize = function(prop) { + return 'order'; + }; + + Order.prototype.set = function(decl, prefix) { + var spec; + spec = flexSpec(prefix)[0]; + if (spec === 2009) { + decl.value = (parseInt(decl.value) + 1).toString(); + return Order.__super__.set.call(this, decl, prefix); + } else { + return Order.__super__.set.apply(this, arguments); + } + }; + + return Order; + + })(Declaration); + + module.exports = Order; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/placeholder.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/placeholder.js new file mode 100644 index 00000000..51d3bf9a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/placeholder.js @@ -0,0 +1,35 @@ +(function() { + var Placeholder, Selector, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Selector = require('../selector'); + + Placeholder = (function(_super) { + __extends(Placeholder, _super); + + function Placeholder() { + return Placeholder.__super__.constructor.apply(this, arguments); + } + + Placeholder.names = ['::placeholder']; + + Placeholder.prototype.prefixed = function(prefix) { + if ('-webkit-' === prefix) { + return '::-webkit-input-placeholder'; + } else if ('-ms-' === prefix) { + return ':-ms-input-placeholder'; + } else if ('-moz- old' === prefix) { + return ':-moz-placeholder'; + } else { + return "::" + prefix + "placeholder"; + } + }; + + return Placeholder; + + })(Selector); + + module.exports = Placeholder; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/transform.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/transform.js new file mode 100644 index 00000000..dd1e456a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/transform.js @@ -0,0 +1,31 @@ +(function() { + var Transform, Value, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Value = require('../value'); + + Transform = (function(_super) { + __extends(Transform, _super); + + function Transform() { + return Transform.__super__.constructor.apply(this, arguments); + } + + Transform.names = ['transform']; + + Transform.prototype.replace = function(value, prefix) { + if (prefix === '-ms-') { + return value; + } else { + return Transform.__super__.replace.apply(this, arguments); + } + }; + + return Transform; + + })(Value); + + module.exports = Transform; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/transition.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/transition.js new file mode 100644 index 00000000..70306f30 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/hacks/transition.js @@ -0,0 +1,37 @@ +(function() { + var OldValue, Transition, Value, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + OldValue = require('../old-value'); + + Value = require('../value'); + + Transition = (function(_super) { + __extends(Transition, _super); + + function Transition() { + return Transition.__super__.constructor.apply(this, arguments); + } + + Transition.names = ['flex', 'flex-grow', 'flex-shrink', 'flex-basis']; + + Transition.prototype.prefixed = function(prefix) { + return this.all.prefixed(this.name, prefix); + }; + + Transition.prototype.replace = function(string, prefix) { + return string.replace(this.regexp(), '$1' + this.prefixed(prefix) + '$3'); + }; + + Transition.prototype.old = function(prefix) { + return new OldValue(this.prefixed(prefix)); + }; + + return Transition; + + })(Value); + + module.exports = Transition; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/info.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/info.js new file mode 100644 index 00000000..c097a1b2 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/info.js @@ -0,0 +1,114 @@ +(function() { + var capitalize, names, prefix; + + capitalize = function(str) { + return str.slice(0, 1).toUpperCase() + str.slice(1); + }; + + names = { + ie: 'IE', + ff: 'Firefox', + ios: 'iOS' + }; + + prefix = function(name, transition, prefixes) { + var out; + out = ' ' + name + (transition ? '*' : '') + ': '; + out += prefixes.map(function(i) { + return i.replace(/^-(.*)-$/g, '$1'); + }).join(', '); + out += "\n"; + return out; + }; + + module.exports = function(prefixes) { + var atrules, browser, data, list, name, needTransition, out, props, selector, selectors, string, transitionProp, useTransition, value, values, version, versions, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _ref3, _ref4, _ref5, _ref6; + if (prefixes.browsers.selected.length === 0) { + return "No browsers selected"; + } + versions = []; + _ref = prefixes.browsers.selected; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + browser = _ref[_i]; + _ref1 = browser.split(' '), name = _ref1[0], version = _ref1[1]; + name = names[name] || capitalize(name); + if (versions[name]) { + versions[name].push(version); + } else { + versions[name] = [version]; + } + } + out = "Browsers:\n"; + for (browser in versions) { + list = versions[browser]; + list = list.sort(function(a, b) { + return parseFloat(b) - parseFloat(a); + }); + out += ' ' + browser + ': ' + list.join(', ') + "\n"; + } + atrules = ''; + _ref2 = prefixes.add; + for (name in _ref2) { + data = _ref2[name]; + if (name[0] === '@' && data.prefixes) { + atrules += prefix(name, false, data.prefixes); + } + } + if (atrules !== '') { + out += "\nAt-Rules:\n" + atrules; + } + selectors = ''; + _ref3 = prefixes.add.selectors; + for (_j = 0, _len1 = _ref3.length; _j < _len1; _j++) { + selector = _ref3[_j]; + if (selector.prefixes) { + selectors += prefix(selector.name, false, selector.prefixes); + } + } + if (selectors !== '') { + out += "\nSelectors:\n" + selectors; + } + values = ''; + props = ''; + useTransition = false; + needTransition = (_ref4 = prefixes.add.transition) != null ? _ref4.prefixes : void 0; + _ref5 = prefixes.add; + for (name in _ref5) { + data = _ref5[name]; + if (name[0] !== '@' && data.prefixes) { + transitionProp = needTransition && prefixes.data[name].transition; + if (transitionProp) { + useTransition = true; + } + props += prefix(name, transitionProp, data.prefixes); + } + if (!data.values) { + continue; + } + if (prefixes.transitionProps.some(function(i) { + return i === name; + })) { + continue; + } + _ref6 = data.values; + for (_k = 0, _len2 = _ref6.length; _k < _len2; _k++) { + value = _ref6[_k]; + string = prefix(value.name, false, value.prefixes); + if (values.indexOf(string) === -1) { + values += string; + } + } + } + if (useTransition) { + props += " * - can be used in transition\n"; + } + if (props !== '') { + out += "\nProperties:\n" + props; + } + if (values !== '') { + out += "\nValues:\n" + values; + } + return out; + }; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/keyframes.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/keyframes.js new file mode 100644 index 00000000..60f2850e --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/keyframes.js @@ -0,0 +1,40 @@ +(function() { + var Keyframes, Prefixer, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Prefixer = require('./prefixer'); + + Keyframes = (function(_super) { + __extends(Keyframes, _super); + + function Keyframes() { + return Keyframes.__super__.constructor.apply(this, arguments); + } + + Keyframes.prototype.check = function(atRule) { + return atRule.name === 'keyframes'; + }; + + Keyframes.prototype.add = function(atRule, prefix) { + var already, cloned, prefixed; + prefixed = prefix + atRule.name; + already = atRule.parent.some(function(i) { + return i.name === prefixed && i.params === atRule.params; + }); + if (already) { + return; + } + cloned = this.clone(atRule, { + name: prefixed + }); + return atRule.parent.insertBefore(atRule, cloned); + }; + + return Keyframes; + + })(Prefixer); + + module.exports = Keyframes; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/old-value.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/old-value.js new file mode 100644 index 00000000..38819e2c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/old-value.js @@ -0,0 +1,29 @@ +(function() { + var OldValue, utils; + + utils = require('./utils'); + + OldValue = (function() { + function OldValue(name, string, regexp) { + this.name = name; + this.string = string; + this.regexp = regexp; + this.regexp || (this.regexp = utils.regexp(this.name)); + this.string || (this.string = this.name); + } + + OldValue.prototype.check = function(value) { + if (value.indexOf(this.string) !== -1) { + return !!value.match(this.regexp); + } else { + return false; + } + }; + + return OldValue; + + })(); + + module.exports = OldValue; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/prefixer.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/prefixer.js new file mode 100644 index 00000000..72a0c411 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/prefixer.js @@ -0,0 +1,84 @@ +(function() { + var Browsers, Prefixer, utils, vendor; + + Browsers = require('./browsers'); + + vendor = require('postcss/lib/vendor'); + + utils = require('./utils'); + + Prefixer = (function() { + Prefixer.hack = function(klass) { + var name, _i, _len, _ref, _results; + this.hacks || (this.hacks = {}); + _ref = klass.names; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + name = _ref[_i]; + _results.push(this.hacks[name] = klass); + } + return _results; + }; + + Prefixer.load = function(name, prefixes, all) { + var klass, _ref; + klass = (_ref = this.hacks) != null ? _ref[name] : void 0; + if (klass) { + return new klass(name, prefixes, all); + } else { + return new this(name, prefixes, all); + } + }; + + Prefixer.clone = function(node, overrides) { + var cloned; + cloned = node.clone(overrides); + delete cloned._autoprefixerPrefix; + delete cloned._autoprefixerValues; + return cloned; + }; + + function Prefixer(name, prefixes, all) { + this.name = name; + this.prefixes = prefixes; + this.all = all; + } + + Prefixer.prototype.parentPrefix = function(node) { + var prefix; + prefix = node._autoprefixerPrefix != null ? node._autoprefixerPrefix : node.type === 'decl' && node.prop[0] === '-' ? vendor.prefix(node.prop) : node.type === 'root' ? false : node.type === 'rule' && node.selector.indexOf(':-') !== -1 ? node.selector.match(/:(-\w+-)/)[1] : node.type === 'atrule' && node.name[0] === '-' ? vendor.prefix(node.name) : this.parentPrefix(node.parent); + if (Browsers.prefixes().indexOf(prefix) === -1) { + prefix = false; + } + return node._autoprefixerPrefix = prefix; + }; + + Prefixer.prototype.process = function(node) { + var parent, prefix, _i, _len, _ref, _results; + if (!this.check(node)) { + return; + } + parent = this.parentPrefix(node); + _ref = this.prefixes; + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + prefix = _ref[_i]; + if (parent && parent !== utils.removeNote(prefix)) { + continue; + } + _results.push(this.add(node, prefix)); + } + return _results; + }; + + Prefixer.prototype.clone = function(node, overrides) { + return Prefixer.clone(node, overrides); + }; + + return Prefixer; + + })(); + + module.exports = Prefixer; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/prefixes.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/prefixes.js new file mode 100644 index 00000000..a6d7762a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/prefixes.js @@ -0,0 +1,315 @@ +(function() { + var Declaration, Keyframes, Prefixes, Processor, Selector, Value, declsCache, utils, vendor; + + utils = require('./utils'); + + vendor = require('postcss/lib/vendor'); + + Processor = require('./processor'); + + Declaration = require('./declaration'); + + Keyframes = require('./keyframes'); + + Selector = require('./selector'); + + Value = require('./value'); + + Selector.hack(require('./hacks/fullscreen')); + + Selector.hack(require('./hacks/placeholder')); + + Declaration.hack(require('./hacks/flex')); + + Declaration.hack(require('./hacks/order')); + + Declaration.hack(require('./hacks/filter')); + + Declaration.hack(require('./hacks/flex-flow')); + + Declaration.hack(require('./hacks/flex-grow')); + + Declaration.hack(require('./hacks/flex-wrap')); + + Declaration.hack(require('./hacks/align-self')); + + Declaration.hack(require('./hacks/flex-basis')); + + Declaration.hack(require('./hacks/align-items')); + + Declaration.hack(require('./hacks/flex-shrink')); + + Declaration.hack(require('./hacks/border-image')); + + Declaration.hack(require('./hacks/align-content')); + + Declaration.hack(require('./hacks/border-radius')); + + Declaration.hack(require('./hacks/flex-direction')); + + Declaration.hack(require('./hacks/justify-content')); + + Value.hack(require('./hacks/gradient')); + + Value.hack(require('./hacks/transform')); + + Value.hack(require('./hacks/transition')); + + Value.hack(require('./hacks/display-flex')); + + Value.hack(require('./hacks/fill-available')); + + declsCache = {}; + + Prefixes = (function() { + function Prefixes(data, browsers) { + var _ref; + this.data = data; + this.browsers = browsers; + _ref = this.preprocess(this.select(this.data)), this.add = _ref[0], this.remove = _ref[1]; + this.processor = new Processor(this); + } + + Prefixes.prototype.transitionProps = ['transition', 'transition-property']; + + Prefixes.prototype.select = function(list) { + var add, all, data, name, notes, selected; + selected = { + add: {}, + remove: {} + }; + for (name in list) { + data = list[name]; + add = data.browsers.map(function(i) { + var params; + params = i.split(' '); + return { + browser: params[0] + ' ' + params[1], + note: params[2] + }; + }); + notes = add.filter(function(i) { + return i.note; + }).map((function(_this) { + return function(i) { + return _this.browsers.prefix(i.browser) + ' ' + i.note; + }; + })(this)); + notes = utils.uniq(notes); + add = add.filter((function(_this) { + return function(i) { + return _this.browsers.isSelected(i.browser); + }; + })(this)).map((function(_this) { + return function(i) { + var prefix; + prefix = _this.browsers.prefix(i.browser); + if (i.note) { + return prefix + ' ' + i.note; + } else { + return prefix; + } + }; + })(this)); + add = this.sort(utils.uniq(add)); + all = data.browsers.map((function(_this) { + return function(i) { + return _this.browsers.prefix(i); + }; + })(this)); + if (data.mistakes) { + all = all.concat(data.mistakes); + } + all = all.concat(notes); + all = utils.uniq(all); + if (add.length) { + selected.add[name] = add; + if (add.length < all.length) { + selected.remove[name] = all.filter(function(i) { + return add.indexOf(i) === -1; + }); + } + } else { + selected.remove[name] = all; + } + } + return selected; + }; + + Prefixes.prototype.sort = function(prefixes) { + return prefixes.sort(function(a, b) { + var aLength, bLength; + aLength = utils.removeNote(a).length; + bLength = utils.removeNote(b).length; + if (aLength === bLength) { + return b.length - a.length; + } else { + return bLength - aLength; + } + }); + }; + + Prefixes.prototype.preprocess = function(selected) { + var add, name, old, olds, prefix, prefixed, prefixes, prop, props, remove, selector, value, values, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _len5, _len6, _m, _n, _o, _ref, _ref1, _ref2; + add = { + selectors: [] + }; + _ref = selected.add; + for (name in _ref) { + prefixes = _ref[name]; + if (name === '@keyframes') { + add[name] = new Keyframes(name, prefixes, this); + } else if (this.data[name].selector) { + add.selectors.push(Selector.load(name, prefixes, this)); + } else { + props = this.data[name].transition ? this.transitionProps : this.data[name].props; + if (props) { + value = Value.load(name, prefixes, this); + for (_i = 0, _len = props.length; _i < _len; _i++) { + prop = props[_i]; + if (!add[prop]) { + add[prop] = { + values: [] + }; + } + add[prop].values.push(value); + } + } + if (!this.data[name].props) { + values = ((_ref1 = add[name]) != null ? _ref1.values : void 0) || []; + add[name] = Declaration.load(name, prefixes, this); + add[name].values = values; + } + } + } + remove = { + selectors: [] + }; + _ref2 = selected.remove; + for (name in _ref2) { + prefixes = _ref2[name]; + if (this.data[name].selector) { + selector = Selector.load(name, prefixes); + for (_j = 0, _len1 = prefixes.length; _j < _len1; _j++) { + prefix = prefixes[_j]; + remove.selectors.push(selector.checker(prefix)); + } + } else if (name[0] === '@') { + for (_k = 0, _len2 = prefixes.length; _k < _len2; _k++) { + prefix = prefixes[_k]; + prefixed = '@' + prefix + name.slice(1); + remove[prefixed] = { + remove: true + }; + } + } else { + props = this.data[name].transition ? this.transitionProps : this.data[name].props; + if (props) { + value = Value.load(name, [], this); + for (_l = 0, _len3 = prefixes.length; _l < _len3; _l++) { + prefix = prefixes[_l]; + old = value.old(prefix); + if (old) { + for (_m = 0, _len4 = props.length; _m < _len4; _m++) { + prop = props[_m]; + if (!remove[prop]) { + remove[prop] = {}; + } + if (!remove[prop].values) { + remove[prop].values = []; + } + remove[prop].values.push(old); + } + } + } + } + if (!this.data[name].props) { + for (_n = 0, _len5 = prefixes.length; _n < _len5; _n++) { + prefix = prefixes[_n]; + prop = vendor.unprefixed(name); + olds = this.decl(name).old(name, prefix); + for (_o = 0, _len6 = olds.length; _o < _len6; _o++) { + prefixed = olds[_o]; + if (!remove[prefixed]) { + remove[prefixed] = {}; + } + remove[prefixed].remove = true; + } + } + } + } + } + return [add, remove]; + }; + + Prefixes.prototype.decl = function(prop) { + var decl; + decl = declsCache[prop]; + if (decl) { + return decl; + } else { + return declsCache[prop] = Declaration.load(prop); + } + }; + + Prefixes.prototype.unprefixed = function(prop) { + prop = vendor.unprefixed(prop); + return this.decl(prop).normalize(prop); + }; + + Prefixes.prototype.prefixed = function(prop, prefix) { + prop = vendor.unprefixed(prop); + return this.decl(prop).prefixed(prop, prefix); + }; + + Prefixes.prototype.values = function(type, prop) { + var data, global, values, _ref, _ref1; + data = this[type]; + global = (_ref = data['*']) != null ? _ref.values : void 0; + values = (_ref1 = data[prop]) != null ? _ref1.values : void 0; + if (global && values) { + return utils.uniq(global.concat(values)); + } else { + return global || values || []; + } + }; + + Prefixes.prototype.group = function(decl) { + var checker, index, length, rule, unprefixed; + rule = decl.parent; + index = rule.index(decl); + length = rule.decls.length; + unprefixed = this.unprefixed(decl.prop); + checker = (function(_this) { + return function(step, callback) { + var other; + index += step; + while (index >= 0 && index < length) { + other = rule.decls[index]; + if (_this.unprefixed(other.prop) !== unprefixed) { + break; + } else if (callback(other) === true) { + return true; + } + index += step; + } + return false; + }; + })(this); + return { + up: function(callback) { + return checker(-1, callback); + }, + down: function(callback) { + return checker(+1, callback); + } + }; + }; + + return Prefixes; + + })(); + + module.exports = Prefixes; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/processor.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/processor.js new file mode 100644 index 00000000..4062f3eb --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/processor.js @@ -0,0 +1,105 @@ +(function() { + var Processor, Value, utils, vendor; + + vendor = require('postcss/lib/vendor'); + + Value = require('./value'); + + utils = require('./utils'); + + Processor = (function() { + function Processor(prefixes) { + this.prefixes = prefixes; + } + + Processor.prototype.add = function(css) { + var prefixer, selector, _i, _len, _ref; + prefixer = this.prefixes.add['@keyframes']; + if (prefixer) { + css.eachAtRule(function(rule) { + return prefixer.process(rule); + }); + } + _ref = this.prefixes.add.selectors; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + selector = _ref[_i]; + css.eachRule(function(rule) { + return selector.process(rule); + }); + } + css.eachDecl((function(_this) { + return function(decl) { + var prefix; + prefix = _this.prefixes.add[decl.prop]; + if (prefix && prefix.prefixes) { + return prefix.process(decl); + } + }; + })(this)); + return css.eachDecl((function(_this) { + return function(decl) { + var unprefixed, value, _j, _len1, _ref1; + unprefixed = _this.prefixes.unprefixed(decl.prop); + _ref1 = _this.prefixes.values('add', unprefixed); + for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { + value = _ref1[_j]; + value.process(decl); + } + return Value.save(_this.prefixes, decl); + }; + })(this)); + }; + + Processor.prototype.remove = function(css) { + var checker, _i, _len, _ref; + css.eachAtRule((function(_this) { + return function(rule, i) { + if (_this.prefixes.remove['@' + rule.name]) { + return rule.parent.remove(i); + } + }; + })(this)); + _ref = this.prefixes.remove.selectors; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + checker = _ref[_i]; + css.eachRule((function(_this) { + return function(rule, i) { + if (checker(rule)) { + return rule.parent.remove(i); + } + }; + })(this)); + } + return css.eachDecl((function(_this) { + return function(decl, i) { + var notHack, rule, unprefixed, _j, _len1, _ref1, _ref2; + rule = decl.parent; + unprefixed = _this.prefixes.unprefixed(decl.prop); + if ((_ref1 = _this.prefixes.remove[decl.prop]) != null ? _ref1.remove : void 0) { + notHack = _this.prefixes.group(decl).down(function(i) { + return i.prop === unprefixed; + }); + if (notHack) { + rule.remove(i); + return; + } + } + _ref2 = _this.prefixes.values('remove', unprefixed); + for (_j = 0, _len1 = _ref2.length; _j < _len1; _j++) { + checker = _ref2[_j]; + if (checker.check(decl.value)) { + rule.remove(i); + return; + } + } + }; + })(this)); + }; + + return Processor; + + })(); + + module.exports = Processor; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/selector.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/selector.js new file mode 100644 index 00000000..bf3f09ee --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/selector.js @@ -0,0 +1,75 @@ +(function() { + var Prefixer, Selector, utils, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Prefixer = require('./prefixer'); + + utils = require('./utils'); + + Selector = (function(_super) { + __extends(Selector, _super); + + function Selector(name, prefixes, all) { + this.name = name; + this.prefixes = prefixes; + this.all = all; + this.regexpCache = {}; + } + + Selector.prototype.check = function(rule, prefix) { + var name; + name = prefix ? this.prefixed(prefix) : this.name; + if (rule.selector.indexOf(name) !== -1) { + return !!rule.selector.match(this.regexp(prefix)); + } else { + return false; + } + }; + + Selector.prototype.checker = function(prefix) { + return (function(_this) { + return function(rule) { + return _this.check(rule, prefix); + }; + })(this); + }; + + Selector.prototype.prefixed = function(prefix) { + return this.name.replace(/^([^\w]*)/, '$1' + prefix); + }; + + Selector.prototype.regexp = function(prefix) { + var name; + if (this.regexpCache[prefix]) { + return this.regexpCache[prefix]; + } + name = prefix ? this.prefixed(prefix) : this.name; + return this.regexpCache = RegExp("(^|[^:\"'=])" + (utils.escapeRegexp(name)), "gi"); + }; + + Selector.prototype.replace = function(selector, prefix) { + return selector.replace(this.regexp(), '$1' + this.prefixed(prefix)); + }; + + Selector.prototype.add = function(rule, prefix) { + var cloned, prefixed; + prefixed = this.replace(rule.selector, prefix); + if (rule.parent.some(function(i) { + return i.selector === prefixed; + })) { + return; + } + cloned = this.clone(rule, { + selector: prefixed + }); + return rule.parent.insertBefore(rule, cloned); + }; + + return Selector; + + })(Prefixer); + + module.exports = Selector; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/updater.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/updater.js new file mode 100644 index 00000000..f8ab33e5 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/updater.js @@ -0,0 +1,225 @@ +(function() { + var coffee, fs, https; + + coffee = require('coffee-script'); + + https = require('https'); + + fs = require('fs'); + + module.exports = { + browsers: { + firefox: 'ff', + chrome: 'chrome', + safari: 'safari', + ios_saf: 'ios', + opera: 'opera', + ie: 'ie', + bb: 'bb', + android: 'android' + }, + run: function() { + var i, updaters, _i, _len, _ref, _results; + updaters = __dirname + '/../updaters/'; + _ref = fs.readdirSync(updaters).sort(); + _results = []; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + i = _ref[_i]; + if (!i.match(/\.(coffee|js)$/)) { + continue; + } + _results.push(require(updaters + i).apply(this)); + } + return _results; + }, + requests: 0, + doneCallbacks: [], + requestCallbacks: [], + done: function(callback) { + this.doneCallbacks || (this.doneCallbacks = []); + return this.doneCallbacks.push(callback); + }, + error: function(message) { + process.stderr.write("\n" + message + "\n"); + return process.exit(1); + }, + request: function(callback) { + this.requestCallbacks || (this.requestCallbacks = []); + return this.requestCallbacks.push(callback); + }, + github: function(path, callback) { + this.requests += 1; + return https.get("https://raw.github.com/" + path, (function(_this) { + return function(res) { + var data; + data = ''; + res.on('data', function(chunk) { + return data += chunk; + }); + return res.on('end', function() { + var e, func, title, _i, _j, _len, _len1, _ref, _ref1, _results; + try { + callback(JSON.parse(data)); + } catch (_error) { + e = _error; + title = data.match(/([^<]+)<\/title>/); + if (title) { + _this.error("" + title[1] + " on " + path); + } else { + _this.error("Parsing error in " + path + ":\n" + e.message); + } + } + _this.requests -= 1; + _ref = _this.requestCallbacks; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + func = _ref[_i]; + func(); + } + if (_this.requests === 0) { + _ref1 = _this.doneCallbacks.reverse(); + _results = []; + for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) { + func = _ref1[_j]; + _results.push(func()); + } + return _results; + } + }); + }; + })(this)); + }, + sort: function(browsers) { + return browsers.sort(function(a, b) { + a = a.split(' '); + b = b.split(' '); + if (a[0] > b[0]) { + return 1; + } else if (a[0] < b[0]) { + return -1; + } else { + return parseFloat(a[1]) - parseFloat(b[1]); + } + }); + }, + parse: function(data) { + var browser, interval, need, support, version, versions, _i, _len, _ref, _ref1; + need = []; + _ref = data.stats; + for (browser in _ref) { + versions = _ref[browser]; + for (interval in versions) { + support = versions[interval]; + _ref1 = interval.split('-'); + for (_i = 0, _len = _ref1.length; _i < _len; _i++) { + version = _ref1[_i]; + if (this.browsers[browser] && support.match(/\sx($|\s)/)) { + version = version.replace(/\.0$/, ''); + need.push(this.browsers[browser] + ' ' + version); + } + } + } + } + return this.sort(need); + }, + feature: function(file, callback) { + var url; + url = "Fyrd/caniuse/master/features-json/" + file + ".json"; + return this.github(url, (function(_this) { + return function(data) { + return callback(_this.parse(data)); + }; + })(this)); + }, + fork: function(fork, file, callback) { + var branch, url, user, _ref; + _ref = fork.split(':'), user = _ref[0], branch = _ref[1]; + branch || (branch = 'master'); + url = "" + user + "/caniuse/" + branch + "/features-json/" + file + ".json"; + return this.github(url, (function(_this) { + return function(data) { + return callback(_this.parse(data)); + }; + })(this)); + }, + all: function(callback) { + var browsers, data, list, name, version, _i, _len, _ref; + browsers = require('../data/browsers'); + list = []; + for (name in browsers) { + data = browsers[name]; + _ref = data.versions; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + version = _ref[_i]; + list.push(name + ' ' + version); + } + } + return callback(this.sort(list)); + }, + map: function(browsers, callback) { + var browser, name, version, _i, _len, _ref, _results; + _results = []; + for (_i = 0, _len = browsers.length; _i < _len; _i++) { + browser = browsers[_i]; + _ref = browser.split(' '), name = _ref[0], version = _ref[1]; + version = parseFloat(version); + _results.push(callback(browser, name, version)); + } + return _results; + }, + stringify: function(obj, indent) { + var key, local, processed, value; + if (indent == null) { + indent = ''; + } + if (obj instanceof Array) { + local = indent + ' '; + return ("[\n" + local) + obj.map((function(_this) { + return function(i) { + return _this.stringify(i, local); + }; + })(this)).join("\n" + local) + ("\n" + indent + "]"); + } else if (typeof obj === 'object') { + local = indent + ' '; + processed = []; + for (key in obj) { + value = obj[key]; + if (key.match(/'|-|@|:/)) { + key = "\"" + key + "\""; + } + value = this.stringify(value, local); + if (value[0] !== "\n") { + value = ' ' + value; + } + processed.push(key + ':' + value); + } + return "\n" + local + processed.join("\n" + local) + "\n"; + } else { + return JSON.stringify(obj); + } + }, + changed: [], + save: function(name, json) { + var content, file, key, sorted, _i, _len, _ref; + sorted = {}; + _ref = Object.keys(json).sort(); + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + key = _ref[_i]; + sorted[key] = json[key]; + } + file = __dirname + ("/../data/" + name); + content = "# Don't edit this files, because it's autogenerated.\n" + "# See updaters/ dir for generator. " + "Run `bin/autoprefixer --update` to update." + "\n\n"; + content += "module.exports =" + this.stringify(sorted) + ";\n"; + if (fs.existsSync(file + '.js')) { + file += '.js'; + content = coffee.compile(content); + } else { + file += '.coffee'; + } + if (fs.readFileSync(file).toString() !== content) { + this.changed.push(name); + return fs.writeFileSync(file, content); + } + } + }; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/utils.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/utils.js new file mode 100644 index 00000000..32568164 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/utils.js @@ -0,0 +1,41 @@ +(function() { + module.exports = { + error: function(text) { + var err; + err = new Error(text); + err.autoprefixer = true; + throw err; + }, + uniq: function(array) { + var filtered, i, _i, _len; + filtered = []; + for (_i = 0, _len = array.length; _i < _len; _i++) { + i = array[_i]; + if (filtered.indexOf(i) === -1) { + filtered.push(i); + } + } + return filtered; + }, + removeNote: function(string) { + if (string.indexOf(' ') === -1) { + return string; + } else { + return string.split(' ')[0]; + } + }, + escapeRegexp: function(string) { + return string.replace(/[.?*+\^\$\[\]\\(){}|\-]/g, '\\$&'); + }, + regexp: function(word, escape) { + if (escape == null) { + escape = true; + } + if (escape) { + word = this.escapeRegexp(word); + } + return RegExp("(^|[\\s,(])(" + word + "($|[\\s(,]))", "gi"); + } + }; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/value.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/value.js new file mode 100644 index 00000000..242c14b4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/lib/value.js @@ -0,0 +1,97 @@ +(function() { + var OldValue, Prefixer, Value, utils, vendor, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Prefixer = require('./prefixer'); + + OldValue = require('./old-value'); + + vendor = require('postcss/lib/vendor'); + + utils = require('./utils'); + + Value = (function(_super) { + __extends(Value, _super); + + function Value() { + return Value.__super__.constructor.apply(this, arguments); + } + + Value.save = function(prefixes, decl) { + var cloned, prefix, prefixed, propPrefix, rule, value, _ref, _results; + _ref = decl._autoprefixerValues; + _results = []; + for (prefix in _ref) { + value = _ref[prefix]; + if (value === decl.value) { + continue; + } + propPrefix = vendor.prefix(decl.prop); + if (propPrefix === prefix) { + _results.push(decl.value = value); + } else if (propPrefix === '-pie-') { + continue; + } else { + prefixed = prefixes.prefixed(decl.prop, prefix); + rule = decl.parent; + if (rule.every(function(i) { + return i.prop !== prefixed; + })) { + if (rule.every(function(i) { + return i.prop !== decl.prop || i.value !== value; + })) { + cloned = this.clone(decl, { + value: value + }); + _results.push(decl.parent.insertBefore(decl, cloned)); + } else { + _results.push(void 0); + } + } else { + _results.push(void 0); + } + } + } + return _results; + }; + + Value.prototype.check = function(decl) { + var value; + value = decl.value; + if (value.indexOf(this.name) !== -1) { + return !!value.match(this.regexp()); + } else { + return false; + } + }; + + Value.prototype.regexp = function() { + return this.regexpCache || (this.regexpCache = utils.regexp(this.name)); + }; + + Value.prototype.replace = function(string, prefix) { + return string.replace(this.regexp(), '$1' + prefix + '$2'); + }; + + Value.prototype.add = function(decl, prefix) { + var value; + decl._autoprefixerValues || (decl._autoprefixerValues = {}); + value = decl._autoprefixerValues[prefix] || decl.value; + value = this.replace(value, prefix); + if (value) { + return decl._autoprefixerValues[prefix] = value; + } + }; + + Value.prototype.old = function(prefix) { + return new OldValue(prefix + this.name); + }; + + return Value; + + })(Prefixer); + + module.exports = Value; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/.npmignore b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/.npmignore new file mode 100644 index 00000000..cefaa67a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/.npmignore @@ -0,0 +1,2 @@ +test/ +.travis.yml \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/CHANGELOG.md b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/CHANGELOG.md new file mode 100644 index 00000000..73c222b8 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/CHANGELOG.md @@ -0,0 +1,112 @@ +0.8.1 / 2013-10-24 +------------------ +* copy failed to return an error to the callback if a file doesn't exist (ulikoehler #38, #39) + +0.8.0 / 2013-10-14 +------------------ +* `filter` implemented on `copy()` and `copySync()`. (Srirangan / #36) + +0.7.1 / 2013-10-12 +------------------ +* `copySync()` implemented (Srirangan / #33) +* updated to the latest `jsonfile` version `1.1.0` which gives `options` params for the JSON methods. Closes #32 + +0.7.0 / 2013-10-07 +------------------ +* update readme conventions +* `copy()` now works if destination directory does not exist. Closes #29 + +0.6.4 / 2013-09-05 +------------------ +* changed `homepage` field in package.json to remove NPM warning + +0.6.3 / 2013-06-28 +------------------ +* changed JSON spacing default from `4` to `2` to follow Node conventions +* updated `jsonfile` dep +* updated `rimraf` dep + +0.6.2 / 2013-06-28 +------------------ +* added .npmignore, #25 + +0.6.1 / 2013-05-14 +------------------ +* modified for `strict` mode, closes #24 +* added `outputJson()/outputJsonSync()`, closes #23 + +0.6.0 / 2013-03-18 +------------------ +* removed node 0.6 support +* added node 0.10 support +* upgraded to latest `ncp` and `rimraf`. +* optional `graceful-fs` support. Closes #17 + + +0.5.0 / 2013-02-03 +------------------ +* Removed `readTextFile`. +* Renamed `readJSONFile` to `readJSON` and `readJson`, same with write. +* Restructured documentation a bit. Added roadmap. + +0.4.0 / 2013-01-28 +------------------ +* Set default spaces in `jsonfile` from 4 to 2. +* Updated `testutil` deps for tests. +* Renamed `touch()` to `createFile()` +* Added `outputFile()` and `outputFileSync()` +* Changed creation of testing diretories so the /tmp dir is not littered. +* Added `readTextFile()` and `readTextFileSync()`. + +0.3.2 / 2012-11-01 +------------------ +* Added `touch()` and `touchSync()` methods. + +0.3.1 / 2012-10-11 +------------------ +* Fixed some stray globals. + +0.3.0 / 2012-10-09 +------------------ +* Removed all CoffeeScript from tests. +* Renamed `mkdir` to `mkdirs`/`mkdirp`. + +0.2.1 / 2012-09-11 +------------------ +* Updated `rimraf` dep. + +0.2.0 / 2012-09-10 +------------------ +* Rewrote module into JavaScript. (Must still rewrite tests into JavaScript) +* Added all methods of [jsonfile][https://github.com/jprichardson/node-jsonfile] +* Added Travis-CI. + +0.1.3 / 2012-08-13 +------------------ +* Added method `readJSONFile`. + +0.1.2 / 2012-06-15 +------------------ +* Bug fix: `deleteSync()` didn't exist. +* Verified Node v0.8 compatibility. + +0.1.1 / 2012-06-15 +------------------ +* Fixed bug in `remove()`/`delete()` that wouldn't execute the function if a callback wasn't passed. + +0.1.0 / 2012-05-31 +------------------ +* Renamed `copyFile()` to `copy()`. `copy()` can now copy directories (recursively) too. +* Renamed `rmrf()` to `remove()`. +* `remove()` aliased with `delete()`. +* Added `mkdirp` capabilities. Named: `mkdir()`. Hides Node.js native `mkdir()`. +* Instead of exporting the native `fs` module with new functions, I now copy over the native methods to a new object and export that instead. + +0.0.4 / 2012-03-14 +------------------ +* Removed CoffeeScript dependency + +0.0.3 / 2012-01-11 +------------------ +* Added methods rmrf and rmrfSync +* Moved tests from Jasmine to Mocha diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/LICENSE b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/LICENSE new file mode 100644 index 00000000..c73f7930 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/LICENSE @@ -0,0 +1,16 @@ + +(The MIT License) + +Copyright (c) 2011-2013 JP Richardson + +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-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/README.md b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/README.md new file mode 100644 index 00000000..8fda86af --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/README.md @@ -0,0 +1,332 @@ + +Node.js: fs-extra +================= + +[![build status](https://secure.travis-ci.org/jprichardson/node-fs-extra.png)](http://travis-ci.org/jprichardson/node-fs-extra) + +This module adds a few extra file system methods that aren't included in the native `fs` module. It is a drop in replacement for `fs`. + + + +Why? +---- + +I got tired of including `mkdirp`, `rimraf`, and `cp -r` in most of my projects. + + + + +Installation +------------ + + npm install --save fs-extra + + + +Usage +----- + +`fs-extra` is a drop in replacement for native `fs`. All methods in `fs` are unmodified and attached to `fs-extra`. + +You don't ever need to include the original `fs` module again: + +```javascript +var fs = require('fs') //this is no longer necessary +``` + +you can now do this: + +```javascript +var fs = require('fs-extra'); //var fs = require('fs') +``` + +or if you prefer to make it clear that you're using `fs-extra` and not `fs`, you may want +to do this: + +```javascript +//var fs = require('fs') +var fse = require('fs-extra') +``` + +you can also keep, both, but it's redundant: + +```javascript +var fs = require('fs') + , fse = require('fs-extra') +``` + + + +Methods +------- + +**NOTE:** You can still use the native Node.js methods. They are copied over to `fs-extra`. + + +### copy(src, dest, [filter], callback) + +Copy a file or directory. The directory can have contents. Like `cp -r`. There isn't a synchronous version implemented yet. + +Sync: `copySync()` + + +Examples: + +```javascript +var fs = require('fs-extra'); + +fs.copy('/tmp/myfile', '/tmp/mynewfile', function(err){ + if (err) return console.error(err); + + console.log("success!") +}); //copies file + +fs.copy('/tmp/mydir', '/tmp/mynewdir', function(err){ + if (err) return console.error(err); + + console.log("success!") +}); //copies directory, even if it has subdirectories or files +``` + + +### createFile(file, callback) + +Creates a file. If the file that is requested to be created is in directories that do not exist, these directories are created. If the file already exists, it is **NOT MODIFIED**. + +Sync: `createFileSync()` + + +Example: + +```javascript +var fs = require('fs-extra') + +var file = '/tmp/this/path/does/not/exist/file.txt' + +fs.createFile(file, function(err) { + console.log(err); //null + //file has now been created, including the directory it is to be placed in +}) +``` + + + +### mkdirs(dir, callback) + +Creates a directory. If the parent hierarchy doesn't exist, it's created. Like `mkdir -p`. + +Alias: `mkdirp()` + +Sync: `mkdirsSync()` / `mkdirpSync()` + + +Examples: + +```javascript +var fs = require('fs-extra'); + +fs.mkdirs('/tmp/some/long/path/that/prob/doesnt/exist', function(err){ + if (err) return console.error(err); + + console.log("success!") +}); + +fs.mkdirsSync('/tmp/another/path'); +``` + + +### outputFile(file, data, callback) + +Almost the same as `writeFile`, except that if the directory does not exist, it's created. + +Sync: `outputFileSync()` + + +Example: + +```javascript +var fs = require('fs-extra') +var file = '/tmp/this/path/does/not/exist/file.txt' + +fs.outputFile(file, 'hello!', function(err) { + console.log(err); //null + + fs.readFile(file, 'utf8', function(err, data) { + console.log(data); //hello! + }) +}) +``` + + + +### outputJson(file, data, callback) + +Almost the same as `writeJson`, except that if the directory does not exist, it's created. + +Alias: `outputJSON() + +Sync: `outputJsonSync()`, `outputJSONSync()` + + +Example: + +```javascript +var fs = require('fs-extra') +var file = '/tmp/this/path/does/not/exist/file.txt' + +fs.outputJson(file, {name: 'JP'}, function(err) { + console.log(err); //null + + fs.readJson(file, function(err, data) { + console.log(data.name); //'JP + }) +}) +``` + + + +### readJson(file, [options], callback) + +Reads a JSON file and then parses it into an object. `options` are the same that you'd pass to `fs.readFile`. + +Alias: `readJSON()` + +Sync: `readJsonSync()`, `readJSONSync()` + + +Example: + +```javascript +var fs = require('fs-extra'); + +fs.readJson('./package.json', function(err, packageObj) { + console.log(packageObj.version); //0.1.3 +}); +``` + + +### remove(dir, callback) + +Removes a file or directory. The directory can have contents. Like `rm -rf`. + +Alias: `delete()` + +Sync: `removeSync()` / `deleteSync()` + + +Examples: + +```javascript +var fs = require('fs-extra'); + +fs.remove('/tmp/myfile', function(err){ + if (err) return console.error(err); + + console.log("success!") +}); + +fs.removeSync('/home/jprichardson'); //I just deleted my entire HOME directory. +``` + + + +### writeJson(file, object, [options], callback) + +Writes an object to a JSON file. `options` are the same that you'd pass to `fs.readFile`. + +Alias: `writeJSON()` + +Sync: `writeJsonSync()`, `writeJSONSync()` + +Example: + +```javascript +var fs = require('fs-extra'); +fs.writeJson('./package.json', {name: 'fs-extra'}, function(err){ + console.log(err); +}); +``` + + + +Roadmap to 1.0.0 +----------------- + +This contains items that I'm considering doing. I'd love community feedback. + +* File system walker. I really like this one: https://github.com/daaku/nodejs-walker ... this might be adding too much. Thoughts? +* File/directory tree watcher. There are quite a few. ... this also might be adding too much. I like this one: https://github.com/paulmillr/chokidar but I don't like that it's written in CoffeeScript. Thoughts? +* Method to move files. +* Thinking about moving `rimraf`, `ncp`, and `mkdirps` code into this library. I'd like fs-extra to be a stable library that module authors +can depend upon. A bunch of other dependencies kinda sucks for modules/libraries. (I'm leaning against this now.) +* Change documentation to use the `fse` prefix instead of `fs`. This may encourage people to start using `fse` as a prefix and hence make their code clearer that they're not using the native `fs`. I'm very undecided on this one since `fs-extra` is a drop in replacement for the native `fs`. (I'm leaning against this now.) + + + +Naming +------ + +I put a lot of thought into the naming of these functions. Inspired by @coolaj86's request. So he deserves much of the credit for raising the issue. See discussion(s) here: + +* https://github.com/jprichardson/node-fs-extra/issues/2 +* https://github.com/flatiron/utile/issues/11 +* https://github.com/ryanmcgrath/wrench-js/issues/29 +* https://github.com/substack/node-mkdirp/issues/17 + +First, I believe that in as many cases as possible, the [Node.js naming schemes](http://nodejs.org/api/fs.html) should be chosen. However, there are problems with the Node.js own naming schemes. + +For example, `fs.readFile()` and `fs.readdir()`: the **F** is capitalized in *File* and the **d** is not capitalized in *dir*. Perhaps a bit pedantic, but they should still be consistent. Also, Node.js has chosen a lot of POSIX naming schemes, which I believe is great. See: `fs.mkdir()`, `fs.rmdir()`, `fs.chown()`, etc. + +We have a dilemma though. How do you consistently name methods that perform the following POSIX commands: `cp`, `cp -r`, `mkdir -p`, and `rm -rf`? + +My perspective: when in doubt, err on the side of simplicity. A directory is just a hierarchical grouping of directories and files. Consider that for a moment. So when you want to copy it or remove it, in most cases you'll want to copy or remove all of its contents. When you want to create a directory, if the directory that it's suppose to be contained in does not exist, then in most cases you'll want to create that too. + +So, if you want to remove a file or a directory regardless of whether it has contents, just call `fs.remove(path)` or its alias `fs.delete(path)`. If you want to copy a file or a directory whether it has contents, just call `fs.copy(source, destination)`. If you want to create a directory regardless of whether its parent directories exist, just call `fs.mkdirs(path)` or `fs.mkdirp(path)`. + + +Credit +------ + +`fs-extra` wouldn't be possible without using the modules from the following authors: + +- [Isaac Shlueter](https://github.com/isaacs) +- [Charlie McConnel](https://github.com/avianflu) +- [James Halliday](https://github.com/substack) + + +Contributions +------------- + +If you want to contribute, please add a test if you can. Also, don't change the version in `package.json`. + + +### Contributors + +- [JP Richardson](https://github.com/jprichardson) +- [Mike McNeil](https://github.com/mikermcneil) +- [Ian Crowther](https://github.com/iancrowther) +- [Stephen Mathieson](https://github.com/stephenmathieson) +- [Srirangan](https://github.com/Srirangan) +- [Uli Köhler](https://github.com/ulikoehler) +- `<your name here>` + + + + +License +------- + + +Licensed under MIT + +Copyright (c) 2011-2013 JP Richardson + +[1]: http://nodejs.org/docs/latest/api/fs.html + + +[jsonfile]: https://github.com/jprichardson/node-jsonfile + + + + + diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/copy.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/copy.js new file mode 100644 index 00000000..7a29f3ec --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/copy.js @@ -0,0 +1,79 @@ +"use strict" + +var fs = require('fs') + , ncp = require('ncp').ncp + , path = require('path') + , mkdir = require('./mkdir'), + create = require('./create') + +module.exports.copy = copy; +module.exports.copySync = copySync; + +var BUF_LENGTH = 64 * 1024 +var _buff = new Buffer(BUF_LENGTH) + +var copyFileSync = function(srcFile, destFile) { + var bytesRead, fdr, fdw, pos; + fdr = fs.openSync(srcFile, 'r'); + fdw = fs.openSync(destFile, 'w'); + bytesRead = 1; + pos = 0; + while (bytesRead > 0) { + bytesRead = fs.readSync(fdr, _buff, 0, BUF_LENGTH, pos); + fs.writeSync(fdw, _buff, 0, bytesRead); + pos += bytesRead; + } + fs.closeSync(fdr); + return fs.closeSync(fdw); +} + +function copy(src, dest, filter, callback) { + if( typeof filter === "function" && !callback) { + callback = filter; + filter = null; + } + callback = callback || function(){} + + fs.lstat(src, function(err, stats) { + if (err) return callback(err) + + var dir = null + if (stats.isDirectory()) { + var parts = dest.split(path.sep) + parts.pop() + dir = parts.join(path.sep) + } else { + dir = path.dirname(dest) + } + + fs.exists(dir, function(dirExists) { + if (dirExists) return ncp(src, dest, {filter: filter}, callback); + mkdir.mkdirs(dir, function(err) { + if (err) return callback(err) + ncp(src, dest, {filter: filter}, callback); + }) + }) + }) +} + +function copySync(src, dest, filter) { + filter = filter || function () { return true; }; + var stats = fs.lstatSync(src), + destExists = fs.exists(dest), + performCopy = false; + if (stats.isFile()) { + if (filter instanceof RegExp) performCopy = filter.test(src); + else if (typeof filter === "function") performCopy = filter(src); + if(performCopy) { + if (!destExists) create.createFileSync(dest); + copyFileSync(src, dest); + } + } + else if (stats.isDirectory()) { + if (!destExists) mkdir.mkdirsSync(dest); + var contents = fs.readdirSync(src); + contents.forEach(function (content) { + copySync(src + "/" + content, dest + "/" + content); + }); + } +} diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/create.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/create.js new file mode 100644 index 00000000..cf3a34bd --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/create.js @@ -0,0 +1,55 @@ +"use strict" + +var mkdir = require('./mkdir') + , path = require('path') + , fs = require('fs') + , exists = fs.exists || path.exists + , existsSync = fs.existsSync || path.existsSync + +function createFile (file, callback) { + function makeFile() { + fs.writeFile(file, '', function(err) { + if (err) + callback(err) + else + callback(null); + }) + } + + exists(file, function(fileExists) { + if (fileExists) + return callback(null); + else { + var dir = path.dirname(file); + + exists(dir, function(dirExists) { + if (!dirExists) { + mkdir.mkdirs(dir, function(err) { + if (err) + callback(err) + else + makeFile(); + }) + } else { + makeFile(); + } + }) + } + }) +} + + +function createFileSync (file) { + if (existsSync(file)) + return; + + var dir = path.dirname(file); + if (!existsSync(dir)) + mkdir.mkdirsSync(dir); + + fs.writeFileSync(file, ''); +} + + +module.exports.createFile = createFile; +module.exports.createFileSync = createFileSync; \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/index.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/index.js new file mode 100644 index 00000000..2ad3923d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/index.js @@ -0,0 +1,110 @@ +"use strict" + +var fs = null + , path = require('path') + , jsonFile = require('jsonfile') + , json = require('./json') + , fse = {}; + +try { + // optional dependency + fs = require("graceful-fs") +} catch (er) { + fs = require("fs") +} + +Object.keys(fs).forEach(function(key) { + var func = fs[key]; + if (typeof func == 'function') + fse[key] = func; +}); + +fs = fse; + +// copy + +fs.copy = require('./copy').copy; +fs.copySync = require('./copy').copySync; + +// remove + +var remove = require('./remove'); +fs.remove = remove.remove; +fs.removeSync = remove.removeSync; +fs['delete'] = fs.remove +fs.deleteSync = fs.removeSync + +// mkdir + +var mkdir = require('./mkdir') +fs.mkdirs = mkdir.mkdirs +fs.mkdirsSync = mkdir.mkdirsSync +fs.mkdirp = mkdir.mkdirs +fs.mkdirpSync = mkdir.mkdirsSync + +// create + +var create = require('./create') +fs.createFile = create.createFile; +fs.createFileSync = create.createFileSync; + +//deprecated +fs.touch = function touch() { + console.log('fs.touch() is deprecated. Please use fs.createFile().') + fs.createFile.apply(null, arguments) +} + +fs.touchSync = function touchSync() { + console.log('fs.touchSync() is deprecated. Please use fs.createFileSync().') + fs.createFileSync.apply(null, arguments) +} + +// output + +var output = require('./output'); +fs.outputFile = output.outputFile; +fs.outputFileSync = output.outputFileSync; + +// read + +/*fs.readTextFile = function(file, callback) { + return fs.readFile(file, 'utf8', callback) +} + +fs.readTextFileSync = function(file, callback) { + return fs.readFileSync(file, 'utf8') +}*/ + +// json files + +fs.readJsonFile = jsonFile.readFile; +fs.readJSONFile = jsonFile.readFile; +fs.readJsonFileSync = jsonFile.readFileSync; +fs.readJSONFileSync = jsonFile.readFileSync; + +fs.readJson = jsonFile.readFile; +fs.readJSON = jsonFile.readFile; +fs.readJsonSync = jsonFile.readFileSync; +fs.readJSONSync = jsonFile.readFileSync; + +fs.outputJsonSync = json.outputJsonSync; +fs.outputJSONSync = json.outputJsonSync; +fs.outputJson = json.outputJson; +fs.outputJSON = json.outputJson; + +fs.writeJsonFile = jsonFile.writeFile; +fs.writeJSONFile = jsonFile.writeFile; +fs.writeJsonFileSync = jsonFile.writeFileSync; +fs.writeJSONFileSync = jsonFile.writeFileSync; + +fs.writeJson = jsonFile.writeFile; +fs.writeJSON = jsonFile.writeFile; +fs.writeJsonSync = jsonFile.writeFileSync; +fs.writeJSONSync = jsonFile.writeFileSync; + + +module.exports = fs + +jsonFile.spaces = 2; //set to 2 +module.exports.jsonfile = jsonFile; //so users of fs-extra can modify jsonFile.spaces; + diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/json.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/json.js new file mode 100644 index 00000000..a0b8c2a4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/json.js @@ -0,0 +1,30 @@ +"use strict" + +var jsonFile = require('jsonfile') + , fs = require('fs') + , mkdir = require('./mkdir') + , path = require('path') + +var me = module.exports + +me.outputJsonSync = function(file, data) { + var dir = path.dirname(file) + + if (!fs.existsSync(dir)) + mkdir.mkdirsSync(dir) + + jsonFile.writeFileSync(file, data) +} + +me.outputJson = function(file, data, callback) { + var dir = path.dirname(file) + + fs.exists(dir, function(itDoes) { + if (itDoes) return jsonFile.writeFile(file, data, callback) + + mkdir.mkdirs(dir, function(err) { + if (err) return callback(err) + jsonFile.writeFile(file, data, callback) + }) + }) +} \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/mkdir.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/mkdir.js new file mode 100644 index 00000000..e0b16253 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/mkdir.js @@ -0,0 +1,8 @@ +"use strict" + +var mkdirp = require('mkdirp'); + +module.exports.mkdirs = mkdirp; +module.exports.mkdirsSync = mkdirp.sync; + + diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/output.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/output.js new file mode 100644 index 00000000..85840aa7 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/output.js @@ -0,0 +1,37 @@ +"use strict" + +var mkdir = require('./mkdir') + , path = require('path') + , fs = require('fs') + , exists = fs.exists || path.exists + , existsSync = fs.existsSync || path.existsSync + +function outputFile (file, data, encoding, callback) { + if (typeof encoding === 'function') { + callback = encoding + encoding = 'utf8' + } + + var dir = path.dirname(file) + exists(dir, function(itDoes) { + if (itDoes) return fs.writeFile(file, data, encoding, callback) + + mkdir.mkdirs(dir, function(err) { + if (err) return callback(err) + + fs.writeFile(file, data, encoding, callback) + }) + }) +} + + +function outputFileSync (file, data, encoding) { + var dir = path.dirname(file) + if (existsSync(dir)) return fs.writeFileSync.apply(fs, arguments) + mkdir.mkdirsSync(dir) + fs.writeFileSync.apply(fs, arguments) +} + + +module.exports.outputFile = outputFile; +module.exports.outputFileSync = outputFileSync; \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/remove.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/remove.js new file mode 100644 index 00000000..9d5573b1 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/lib/remove.js @@ -0,0 +1,19 @@ +"use strict" + +var rimraf = require('rimraf') + , fs = require('fs'); + +function rmrfSync(dir) { + return rimraf.sync(dir); +} + +function rmrf(dir, cb) { + if (cb != null) { + return rimraf(dir, cb); + } else { + return rimraf(dir, (function() {})); + } +} + +module.exports.remove = rmrf; +module.exports.removeSync = rmrfSync; diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/.bin/ncp b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/.bin/ncp new file mode 120000 index 00000000..1c026480 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/.bin/ncp @@ -0,0 +1 @@ +../ncp/bin/ncp \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/.bin/rimraf b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/.bin/rimraf new file mode 120000 index 00000000..4cd49a49 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/.bin/rimraf @@ -0,0 +1 @@ +../rimraf/bin.js \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/.npmignore b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/.npmignore new file mode 100644 index 00000000..cefaa67a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/.npmignore @@ -0,0 +1,2 @@ +test/ +.travis.yml \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/CHANGELOG.md b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/CHANGELOG.md new file mode 100644 index 00000000..fb9ec881 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/CHANGELOG.md @@ -0,0 +1,20 @@ +1.1.1 / 2013-11-11 +------------------ +* fixed catching of callback bug (ffissore / #5) + +1.1.0 / 2013-10-11 +------------------ +* added `options` param to methods, (seanodell / #4) + +1.0.1 / 2013-09-05 +------------------ +* removed `homepage` field from package.json to remove NPM warning + +1.0.0 / 2013-06-28 +------------------ +* added `.npmignore`, #1 +* changed spacing default from `4` to `2` to follow Node conventions + +0.0.1 / 2012-09-10 +------------------ +* Initial release. diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/LICENSE b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/LICENSE new file mode 100644 index 00000000..83642bff --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/LICENSE @@ -0,0 +1,15 @@ +(The MIT License) + +Copyright (c) 2012, JP Richardson <jprichardson@gmail.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-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/README.md b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/README.md new file mode 100644 index 00000000..489b3945 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/README.md @@ -0,0 +1,121 @@ +[![build status](https://secure.travis-ci.org/jprichardson/node-jsonfile.png)](http://travis-ci.org/jprichardson/node-jsonfile) + +Node.js - jsonfile +================ + +Easily read/write JSON files. + + +Why? +---- + +Writing `JSON.stringify()` and then `fs.writeFile()` and `JSON.parse()` with `fs.readFile()` enclosed in `try/catch` blocks became annoying. + + + +Installation +------------ + + npm install jsonfile --save + + + +API +--- + +### readFile(filename, [options], callback) + +```javascript +var jf = require('jsonfile') + , util = require('util'); + +var file = '/tmp/data.json'; +js.readFile(file, function(err, obj) { + console.log(util.inspect(obj)); +}); +``` + + +### readFileSync(filename, [options]) + +```javascript +var jf = require('jsonfile') + , util = require('util'); + +var file = '/tmp/data.json'; + +console.log(util.inspect(jf.readFileSync(file))); +``` + + +### writeFile(filename, [options], callback) + +```javascript +var jf = require('jsonfile') + +var file = '/tmp/data.json'; +var obj = {name: 'JP'}; + +jf.writeFile(file, obj, function(err) { + console.log(err); +}) +``` + +### writeFileSync(filename, [options]) + +```javascript +var jf = require('jsonfile') + +var file = '/tmp/data.json'; +var obj = {name: 'JP'}; + +jf.writeFileSync(file, obj); +``` + + +### spaces + +Number of spaces to indent JSON files. + +**default:** 2 + +``` +var jf = require('jsonfile'); + +jf.spaces = 4; + +var file = '/tmp/data.json'; +var obj = {name: 'JP'}; + +jf.writeFile(file, obj, function(err) { //json file has four space indenting now + console.log(err); +}); +``` + + +Contributions +------------- + +If you contribute to this library, please don't change the version numbers in your pull request. + + +### Contributors + +(You can add your name, or I'll add it if you forget) + +- [*] [JP Richardson](https://github.com/jprichardson) +- [2] [Sean O'Dell](https://github.com/seanodell) +- [1] [Federico Fissore](https://github.com/ffissore) + + +License +------- + +(MIT License) + +Copyright 2012-2013, JP Richardson <jprichardson@gmail.com> + + + + + diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/lib/jsonfile.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/lib/jsonfile.js new file mode 100644 index 00000000..011a7756 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/lib/jsonfile.js @@ -0,0 +1,47 @@ +var fs = require('fs'); + +var me = module.exports; + +me.spaces = 2; + +me.readFile = function(file, callback) { + fs.readFile(file, 'utf8', function(err, data) { + if (err) return callback(err, null); + + var obj = null; + try { + obj = JSON.parse(data); + } catch (err2) { + callback(err2, null); + return; + } + callback(null, obj); + }) +} + +me.readFileSync = function(file) { + return JSON.parse(fs.readFileSync(file, 'utf8')); +} + +me.writeFile = function(file, obj, options, callback) { + if (callback == null) { // odd little swap because options is optional + callback = options; + options = null; + } + + var str = ''; + try { + str = JSON.stringify(obj, null, module.exports.spaces); + } catch (err) { + if (callback) { + callback(err, null); + } + return; + } + fs.writeFile(file, str, options, callback); +} + +me.writeFileSync = function(file, obj, options) { + var str = JSON.stringify(obj, null, module.exports.spaces); + return fs.writeFileSync(file, str, options); //not sure if fs.writeFileSync returns anything, but just in case +} \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/package.json b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/package.json new file mode 100644 index 00000000..bf18753c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/jsonfile/package.json @@ -0,0 +1,42 @@ +{ + "name": "jsonfile", + "version": "1.1.1", + "description": "Easily read/write JSON files.", + "repository": { + "type": "git", + "url": "git@github.com:jprichardson/node-jsonfile.git" + }, + "keywords": [ + "read", + "write", + "file", + "json" + ], + "author": { + "name": "JP Richardson", + "email": "jprichardson@gmail.com" + }, + "licenses": [ + { + "type": "MIT", + "url": "" + } + ], + "dependencies": {}, + "devDependencies": { + "testutil": "~0.5.1", + "mocha": "*" + }, + "main": "./lib/jsonfile.js", + "scripts": { + "test": "mocha test" + }, + "readme": "[![build status](https://secure.travis-ci.org/jprichardson/node-jsonfile.png)](http://travis-ci.org/jprichardson/node-jsonfile)\n\nNode.js - jsonfile\n================\n\nEasily read/write JSON files. \n\n\nWhy?\n----\n\nWriting `JSON.stringify()` and then `fs.writeFile()` and `JSON.parse()` with `fs.readFile()` enclosed in `try/catch` blocks became annoying.\n\n\n\nInstallation\n------------\n\n npm install jsonfile --save\n\n\n\nAPI\n---\n\n### readFile(filename, [options], callback)\n\n```javascript\nvar jf = require('jsonfile')\n , util = require('util');\n\nvar file = '/tmp/data.json';\njs.readFile(file, function(err, obj) {\n console.log(util.inspect(obj)); \n});\n```\n\n\n### readFileSync(filename, [options])\n\n```javascript\nvar jf = require('jsonfile')\n , util = require('util');\n\nvar file = '/tmp/data.json';\n\nconsole.log(util.inspect(jf.readFileSync(file)));\n```\n\n\n### writeFile(filename, [options], callback)\n\n```javascript\nvar jf = require('jsonfile')\n\nvar file = '/tmp/data.json';\nvar obj = {name: 'JP'};\n\njf.writeFile(file, obj, function(err) {\n console.log(err);\n})\n```\n\n### writeFileSync(filename, [options])\n\n```javascript\nvar jf = require('jsonfile')\n\nvar file = '/tmp/data.json';\nvar obj = {name: 'JP'};\n\njf.writeFileSync(file, obj);\n```\n\n\n### spaces\n\nNumber of spaces to indent JSON files. \n\n**default:** 2\n\n```\nvar jf = require('jsonfile');\n\njf.spaces = 4;\n\nvar file = '/tmp/data.json';\nvar obj = {name: 'JP'};\n\njf.writeFile(file, obj, function(err) { //json file has four space indenting now\n console.log(err);\n});\n```\n\n\nContributions\n-------------\n\nIf you contribute to this library, please don't change the version numbers in your pull request.\n\n\n### Contributors\n\n(You can add your name, or I'll add it if you forget)\n\n- [*] [JP Richardson](https://github.com/jprichardson)\n- [2] [Sean O'Dell](https://github.com/seanodell)\n- [1] [Federico Fissore](https://github.com/ffissore)\n\n\nLicense\n-------\n\n(MIT License)\n\nCopyright 2012-2013, JP Richardson <jprichardson@gmail.com>\n\n\n\n\n\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/jprichardson/node-jsonfile/issues" + }, + "homepage": "https://github.com/jprichardson/node-jsonfile", + "_id": "jsonfile@1.1.1", + "_from": "jsonfile@~1.1.0" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/.npmignore b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/.npmignore new file mode 100644 index 00000000..9303c347 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/.npmignore @@ -0,0 +1,2 @@ +node_modules/ +npm-debug.log \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/.travis.yml b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/.travis.yml new file mode 100644 index 00000000..84fd7ca2 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - 0.6 + - 0.8 + - 0.9 diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/LICENSE b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/LICENSE new file mode 100644 index 00000000..432d1aeb --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/LICENSE @@ -0,0 +1,21 @@ +Copyright 2010 James Halliday (mail@substack.net) + +This project is free software released under the MIT/X11 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-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/examples/pow.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/examples/pow.js new file mode 100644 index 00000000..e6924212 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/examples/pow.js @@ -0,0 +1,6 @@ +var mkdirp = require('mkdirp'); + +mkdirp('/tmp/foo/bar/baz', function (err) { + if (err) console.error(err) + else console.log('pow!') +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/index.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/index.js new file mode 100644 index 00000000..fda6de8a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/index.js @@ -0,0 +1,82 @@ +var path = require('path'); +var fs = require('fs'); + +module.exports = mkdirP.mkdirp = mkdirP.mkdirP = mkdirP; + +function mkdirP (p, mode, f, made) { + if (typeof mode === 'function' || mode === undefined) { + f = mode; + mode = 0777 & (~process.umask()); + } + if (!made) made = null; + + var cb = f || function () {}; + if (typeof mode === 'string') mode = parseInt(mode, 8); + p = path.resolve(p); + + fs.mkdir(p, mode, function (er) { + if (!er) { + made = made || p; + return cb(null, made); + } + switch (er.code) { + case 'ENOENT': + mkdirP(path.dirname(p), mode, function (er, made) { + if (er) cb(er, made); + else mkdirP(p, mode, cb, made); + }); + break; + + // In the case of any other error, just see if there's a dir + // there already. If so, then hooray! If not, then something + // is borked. + default: + fs.stat(p, function (er2, stat) { + // if the stat fails, then that's super weird. + // let the original error be the failure reason. + if (er2 || !stat.isDirectory()) cb(er, made) + else cb(null, made); + }); + break; + } + }); +} + +mkdirP.sync = function sync (p, mode, made) { + if (mode === undefined) { + mode = 0777 & (~process.umask()); + } + if (!made) made = null; + + if (typeof mode === 'string') mode = parseInt(mode, 8); + p = path.resolve(p); + + try { + fs.mkdirSync(p, mode); + made = made || p; + } + catch (err0) { + switch (err0.code) { + case 'ENOENT' : + made = sync(path.dirname(p), mode, made); + sync(p, mode, made); + break; + + // In the case of any other error, just see if there's a dir + // there already. If so, then hooray! If not, then something + // is borked. + default: + var stat; + try { + stat = fs.statSync(p); + } + catch (err1) { + throw err0; + } + if (!stat.isDirectory()) throw err0; + break; + } + } + + return made; +}; diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/package.json b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/package.json new file mode 100644 index 00000000..dc434821 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/package.json @@ -0,0 +1,34 @@ +{ + "name": "mkdirp", + "description": "Recursively mkdir, like `mkdir -p`", + "version": "0.3.5", + "author": { + "name": "James Halliday", + "email": "mail@substack.net", + "url": "http://substack.net" + }, + "main": "./index", + "keywords": [ + "mkdir", + "directory" + ], + "repository": { + "type": "git", + "url": "http://github.com/substack/node-mkdirp.git" + }, + "scripts": { + "test": "tap test/*.js" + }, + "devDependencies": { + "tap": "~0.4.0" + }, + "license": "MIT", + "readme": "# mkdirp\n\nLike `mkdir -p`, but in node.js!\n\n[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp)\n\n# example\n\n## pow.js\n\n```js\nvar mkdirp = require('mkdirp');\n \nmkdirp('/tmp/foo/bar/baz', function (err) {\n if (err) console.error(err)\n else console.log('pow!')\n});\n```\n\nOutput\n\n```\npow!\n```\n\nAnd now /tmp/foo/bar/baz exists, huzzah!\n\n# methods\n\n```js\nvar mkdirp = require('mkdirp');\n```\n\n## mkdirp(dir, mode, cb)\n\nCreate a new directory and any necessary subdirectories at `dir` with octal\npermission string `mode`.\n\nIf `mode` isn't specified, it defaults to `0777 & (~process.umask())`.\n\n`cb(err, made)` fires with the error or the first directory `made`\nthat had to be created, if any.\n\n## mkdirp.sync(dir, mode)\n\nSynchronously create a new directory and any necessary subdirectories at `dir`\nwith octal permission string `mode`.\n\nIf `mode` isn't specified, it defaults to `0777 & (~process.umask())`.\n\nReturns the first directory that had to be created, if any.\n\n# install\n\nWith [npm](http://npmjs.org) do:\n\n```\nnpm install mkdirp\n```\n\n# license\n\nMIT\n", + "readmeFilename": "readme.markdown", + "bugs": { + "url": "https://github.com/substack/node-mkdirp/issues" + }, + "homepage": "https://github.com/substack/node-mkdirp", + "_id": "mkdirp@0.3.5", + "_from": "mkdirp@0.3.x" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/readme.markdown b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/readme.markdown new file mode 100644 index 00000000..83b0216a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/readme.markdown @@ -0,0 +1,63 @@ +# mkdirp + +Like `mkdir -p`, but in node.js! + +[![build status](https://secure.travis-ci.org/substack/node-mkdirp.png)](http://travis-ci.org/substack/node-mkdirp) + +# example + +## pow.js + +```js +var mkdirp = require('mkdirp'); + +mkdirp('/tmp/foo/bar/baz', function (err) { + if (err) console.error(err) + else console.log('pow!') +}); +``` + +Output + +``` +pow! +``` + +And now /tmp/foo/bar/baz exists, huzzah! + +# methods + +```js +var mkdirp = require('mkdirp'); +``` + +## mkdirp(dir, mode, cb) + +Create a new directory and any necessary subdirectories at `dir` with octal +permission string `mode`. + +If `mode` isn't specified, it defaults to `0777 & (~process.umask())`. + +`cb(err, made)` fires with the error or the first directory `made` +that had to be created, if any. + +## mkdirp.sync(dir, mode) + +Synchronously create a new directory and any necessary subdirectories at `dir` +with octal permission string `mode`. + +If `mode` isn't specified, it defaults to `0777 & (~process.umask())`. + +Returns the first directory that had to be created, if any. + +# install + +With [npm](http://npmjs.org) do: + +``` +npm install mkdirp +``` + +# license + +MIT diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/chmod.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/chmod.js new file mode 100644 index 00000000..520dcb8e --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/chmod.js @@ -0,0 +1,38 @@ +var mkdirp = require('../').mkdirp; +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +var ps = [ '', 'tmp' ]; + +for (var i = 0; i < 25; i++) { + var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + ps.push(dir); +} + +var file = ps.join('/'); + +test('chmod-pre', function (t) { + var mode = 0744 + mkdirp(file, mode, function (er) { + t.ifError(er, 'should not error'); + fs.stat(file, function (er, stat) { + t.ifError(er, 'should exist'); + t.ok(stat && stat.isDirectory(), 'should be directory'); + t.equal(stat && stat.mode & 0777, mode, 'should be 0744'); + t.end(); + }); + }); +}); + +test('chmod', function (t) { + var mode = 0755 + mkdirp(file, mode, function (er) { + t.ifError(er, 'should not error'); + fs.stat(file, function (er, stat) { + t.ifError(er, 'should exist'); + t.ok(stat && stat.isDirectory(), 'should be directory'); + t.end(); + }); + }); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/clobber.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/clobber.js new file mode 100644 index 00000000..0eb70998 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/clobber.js @@ -0,0 +1,37 @@ +var mkdirp = require('../').mkdirp; +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +var ps = [ '', 'tmp' ]; + +for (var i = 0; i < 25; i++) { + var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + ps.push(dir); +} + +var file = ps.join('/'); + +// a file in the way +var itw = ps.slice(0, 3).join('/'); + + +test('clobber-pre', function (t) { + console.error("about to write to "+itw) + fs.writeFileSync(itw, 'I AM IN THE WAY, THE TRUTH, AND THE LIGHT.'); + + fs.stat(itw, function (er, stat) { + t.ifError(er) + t.ok(stat && stat.isFile(), 'should be file') + t.end() + }) +}) + +test('clobber', function (t) { + t.plan(2); + mkdirp(file, 0755, function (err) { + t.ok(err); + t.equal(err.code, 'ENOTDIR'); + t.end(); + }); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/mkdirp.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/mkdirp.js new file mode 100644 index 00000000..b07cd70c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/mkdirp.js @@ -0,0 +1,28 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('woo', function (t) { + t.plan(2); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + mkdirp(file, 0755, function (err) { + if (err) t.fail(err); + else path.exists(file, function (ex) { + if (!ex) t.fail('file not created') + else fs.stat(file, function (err, stat) { + if (err) t.fail(err) + else { + t.equal(stat.mode & 0777, 0755); + t.ok(stat.isDirectory(), 'target not a directory'); + t.end(); + } + }) + }) + }); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/perm.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/perm.js new file mode 100644 index 00000000..23a7abbd --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/perm.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('async perm', function (t) { + t.plan(2); + var file = '/tmp/' + (Math.random() * (1<<30)).toString(16); + + mkdirp(file, 0755, function (err) { + if (err) t.fail(err); + else path.exists(file, function (ex) { + if (!ex) t.fail('file not created') + else fs.stat(file, function (err, stat) { + if (err) t.fail(err) + else { + t.equal(stat.mode & 0777, 0755); + t.ok(stat.isDirectory(), 'target not a directory'); + t.end(); + } + }) + }) + }); +}); + +test('async root perm', function (t) { + mkdirp('/tmp', 0755, function (err) { + if (err) t.fail(err); + t.end(); + }); + t.end(); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/perm_sync.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/perm_sync.js new file mode 100644 index 00000000..f685f609 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/perm_sync.js @@ -0,0 +1,39 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('sync perm', function (t) { + t.plan(2); + var file = '/tmp/' + (Math.random() * (1<<30)).toString(16) + '.json'; + + mkdirp.sync(file, 0755); + path.exists(file, function (ex) { + if (!ex) t.fail('file not created') + else fs.stat(file, function (err, stat) { + if (err) t.fail(err) + else { + t.equal(stat.mode & 0777, 0755); + t.ok(stat.isDirectory(), 'target not a directory'); + t.end(); + } + }) + }); +}); + +test('sync root perm', function (t) { + t.plan(1); + + var file = '/tmp'; + mkdirp.sync(file, 0755); + path.exists(file, function (ex) { + if (!ex) t.fail('file not created') + else fs.stat(file, function (err, stat) { + if (err) t.fail(err) + else { + t.ok(stat.isDirectory(), 'target not a directory'); + t.end(); + } + }) + }); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/race.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/race.js new file mode 100644 index 00000000..96a04476 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/race.js @@ -0,0 +1,41 @@ +var mkdirp = require('../').mkdirp; +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('race', function (t) { + t.plan(4); + var ps = [ '', 'tmp' ]; + + for (var i = 0; i < 25; i++) { + var dir = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + ps.push(dir); + } + var file = ps.join('/'); + + var res = 2; + mk(file, function () { + if (--res === 0) t.end(); + }); + + mk(file, function () { + if (--res === 0) t.end(); + }); + + function mk (file, cb) { + mkdirp(file, 0755, function (err) { + if (err) t.fail(err); + else path.exists(file, function (ex) { + if (!ex) t.fail('file not created') + else fs.stat(file, function (err, stat) { + if (err) t.fail(err) + else { + t.equal(stat.mode & 0777, 0755); + t.ok(stat.isDirectory(), 'target not a directory'); + if (cb) cb(); + } + }) + }) + }); + } +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/rel.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/rel.js new file mode 100644 index 00000000..79858243 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/rel.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('rel', function (t) { + t.plan(2); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var cwd = process.cwd(); + process.chdir('/tmp'); + + var file = [x,y,z].join('/'); + + mkdirp(file, 0755, function (err) { + if (err) t.fail(err); + else path.exists(file, function (ex) { + if (!ex) t.fail('file not created') + else fs.stat(file, function (err, stat) { + if (err) t.fail(err) + else { + process.chdir(cwd); + t.equal(stat.mode & 0777, 0755); + t.ok(stat.isDirectory(), 'target not a directory'); + t.end(); + } + }) + }) + }); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/return.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/return.js new file mode 100644 index 00000000..bce68e56 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/return.js @@ -0,0 +1,25 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('return value', function (t) { + t.plan(4); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + // should return the first dir created. + // By this point, it would be profoundly surprising if /tmp didn't + // already exist, since every other test makes things in there. + mkdirp(file, function (err, made) { + t.ifError(err); + t.equal(made, '/tmp/' + x); + mkdirp(file, function (err, made) { + t.ifError(err); + t.equal(made, null); + }); + }); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/return_sync.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/return_sync.js new file mode 100644 index 00000000..7c222d35 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/return_sync.js @@ -0,0 +1,24 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('return value', function (t) { + t.plan(2); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + // should return the first dir created. + // By this point, it would be profoundly surprising if /tmp didn't + // already exist, since every other test makes things in there. + // Note that this will throw on failure, which will fail the test. + var made = mkdirp.sync(file); + t.equal(made, '/tmp/' + x); + + // making the same file again should have no effect. + made = mkdirp.sync(file); + t.equal(made, null); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/root.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/root.js new file mode 100644 index 00000000..97ad7a2f --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/root.js @@ -0,0 +1,18 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('root', function (t) { + // '/' on unix, 'c:/' on windows. + var file = path.resolve('/'); + + mkdirp(file, 0755, function (err) { + if (err) throw err + fs.stat(file, function (er, stat) { + if (er) throw er + t.ok(stat.isDirectory(), 'target is a directory'); + t.end(); + }) + }); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/sync.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/sync.js new file mode 100644 index 00000000..7530cada --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/sync.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('sync', function (t) { + t.plan(2); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + try { + mkdirp.sync(file, 0755); + } catch (err) { + t.fail(err); + return t.end(); + } + + path.exists(file, function (ex) { + if (!ex) t.fail('file not created') + else fs.stat(file, function (err, stat) { + if (err) t.fail(err) + else { + t.equal(stat.mode & 0777, 0755); + t.ok(stat.isDirectory(), 'target not a directory'); + t.end(); + } + }); + }); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/umask.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/umask.js new file mode 100644 index 00000000..64ccafe2 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/umask.js @@ -0,0 +1,28 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('implicit mode from umask', function (t) { + t.plan(2); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + mkdirp(file, function (err) { + if (err) t.fail(err); + else path.exists(file, function (ex) { + if (!ex) t.fail('file not created') + else fs.stat(file, function (err, stat) { + if (err) t.fail(err) + else { + t.equal(stat.mode & 0777, 0777 & (~process.umask())); + t.ok(stat.isDirectory(), 'target not a directory'); + t.end(); + } + }) + }) + }); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/umask_sync.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/umask_sync.js new file mode 100644 index 00000000..35bd5cbb --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/mkdirp/test/umask_sync.js @@ -0,0 +1,32 @@ +var mkdirp = require('../'); +var path = require('path'); +var fs = require('fs'); +var test = require('tap').test; + +test('umask sync modes', function (t) { + t.plan(2); + var x = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var y = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + var z = Math.floor(Math.random() * Math.pow(16,4)).toString(16); + + var file = '/tmp/' + [x,y,z].join('/'); + + try { + mkdirp.sync(file); + } catch (err) { + t.fail(err); + return t.end(); + } + + path.exists(file, function (ex) { + if (!ex) t.fail('file not created') + else fs.stat(file, function (err, stat) { + if (err) t.fail(err) + else { + t.equal(stat.mode & 0777, (0777 & (~process.umask()))); + t.ok(stat.isDirectory(), 'target not a directory'); + t.end(); + } + }); + }); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/.npmignore b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/.npmignore new file mode 100644 index 00000000..9ecd205c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/.npmignore @@ -0,0 +1,4 @@ +node_modules +.*.sw[op] +.DS_Store +test/fixtures/out diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/.travis.yml b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/.travis.yml new file mode 100644 index 00000000..f686c49b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/.travis.yml @@ -0,0 +1,7 @@ +language: node_js + +node_js: + - 0.4 + - 0.6 + - 0.7 + - 0.8 diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/LICENSE.md b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/LICENSE.md new file mode 100644 index 00000000..e2b9b413 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/LICENSE.md @@ -0,0 +1,21 @@ +# MIT License + +###Copyright (C) 2011 by Charlie McConnell + +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-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/README.md b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/README.md new file mode 100644 index 00000000..79ad086c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/README.md @@ -0,0 +1,52 @@ +# ncp - Asynchronous recursive file & directory copying + +[![Build Status](https://secure.travis-ci.org/AvianFlu/ncp.png)](http://travis-ci.org/AvianFlu/ncp) + +Think `cp -r`, but pure node, and asynchronous. `ncp` can be used both as a CLI tool and programmatically. + +## Command Line usage + +Usage is simple: `ncp [source] [dest] [--limit=concurrency limit] +[--filter=filter] --stopOnErr` + +The 'filter' is a Regular Expression - matched files will be copied. + +The 'concurrency limit' is an integer that represents how many pending file system requests `ncp` has at a time. + +'stopOnErr' is a boolean flag that will tell `ncp` to stop immediately if any +errors arise, rather than attempting to continue while logging errors. + +If there are no errors, `ncp` will output `done.` when complete. If there are errors, the error messages will be logged to `stdout` and to `./ncp-debug.log`, and the copy operation will attempt to continue. + +## Programmatic usage + +Programmatic usage of `ncp` is just as simple. The only argument to the completion callback is a possible error. + +```javascript +var ncp = require('ncp').ncp; + +ncp.limit = 16; + +ncp(source, destination, function (err) { + if (err) { + return console.error(err); + } + console.log('done!'); +}); +``` + +You can also call ncp like `ncp(source, destination, options, callback)`. +`options` should be a dictionary. Currently, such options are available: + + * `options.filter` - a `RegExp` instance, against which each file name is + tested to determine whether to copy it or not, or a function taking single + parameter: copied file name, returning `true` or `false`, determining + whether to copy file or not. + + * `options.transform` - a function: `function (read, write) { read.pipe(write) }` + used to apply streaming transforms while copying. + + * `options.clobber` - boolean=true. if set to false, `ncp` will not overwrite + destination files that already exist. + +Please open an issue if any bugs arise. As always, I accept (working) pull requests, and refunds are available at `/dev/null`. diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/bin/ncp b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/bin/ncp new file mode 100755 index 00000000..388eaba6 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/bin/ncp @@ -0,0 +1,48 @@ +#!/usr/bin/env node + + + + +var ncp = require('../lib/ncp'), + args = process.argv.slice(2), + source, dest; + +if (args.length < 2) { + console.error('Usage: ncp [source] [destination] [--filter=filter] [--limit=concurrency limit]'); + process.exit(1); +} + +// parse arguments the hard way +function startsWith(str, prefix) { + return str.substr(0, prefix.length) == prefix; +} + +var options = {}; +args.forEach(function (arg) { + if (startsWith(arg, "--limit=")) { + options.limit = parseInt(arg.split('=', 2)[1], 10); + } + if (startsWith(arg, "--filter=")) { + options.filter = new RegExp(arg.split('=', 2)[1]); + } + if (startsWith(arg, "--stoponerr")) { + options.stopOnErr = true; + } +}); + +ncp.ncp(args[0], args[1], options, function (err) { + if (Array.isArray(err)) { + console.error('There were errors during the copy.'); + err.forEach(function (err) { + console.error(err.stack || err.message); + }); + process.exit(1); + } + else if (err) { + console.error('An error has occurred.'); + console.error(err.stack || err.message); + process.exit(1); + } +}); + + diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/lib/ncp.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/lib/ncp.js new file mode 100644 index 00000000..d871e009 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/lib/ncp.js @@ -0,0 +1,222 @@ +var fs = require('fs'), + path = require('path'); + +module.exports = ncp +ncp.ncp = ncp + +function ncp (source, dest, options, callback) { + if (!callback) { + callback = options; + options = {}; + } + + var basePath = process.cwd(), + currentPath = path.resolve(basePath, source), + targetPath = path.resolve(basePath, dest), + filter = options.filter, + transform = options.transform, + clobber = options.clobber !== false, + errs = null, + started = 0, + finished = 0, + running = 0, + limit = options.limit || ncp.limit || 16; + + limit = (limit < 1) ? 1 : (limit > 512) ? 512 : limit; + + startCopy(currentPath); + + function startCopy(source) { + started++; + if (filter) { + if (filter instanceof RegExp) { + if (!filter.test(source)) { + return cb(true); + } + } + else if (typeof filter === 'function') { + if (!filter(source)) { + return cb(true); + } + } + } + return getStats(source); + } + + function defer(fn) { + if (typeof(setImmediate) === 'function') + return setImmediate(fn); + return process.nextTick(fn); + } + + function getStats(source) { + if (running >= limit) { + return defer(function () { + getStats(source); + }); + } + running++; + fs.lstat(source, function (err, stats) { + var item = {}; + if (err) { + return onError(err); + } + + // We need to get the mode from the stats object and preserve it. + item.name = source; + item.mode = stats.mode; + + if (stats.isDirectory()) { + return onDir(item); + } + else if (stats.isFile()) { + return onFile(item); + } + else if (stats.isSymbolicLink()) { + // Symlinks don't really need to know about the mode. + return onLink(source); + } + }); + } + + function onFile(file) { + var target = file.name.replace(currentPath, targetPath); + isWritable(target, function (writable) { + if (writable) { + return copyFile(file, target); + } + if(clobber) + rmFile(target, function () { + copyFile(file, target); + }); + }); + } + + function copyFile(file, target) { + var readStream = fs.createReadStream(file.name), + writeStream = fs.createWriteStream(target, { mode: file.mode }); + if(transform) { + transform(readStream, writeStream,file); + } else { + readStream.pipe(writeStream); + } + readStream.once('end', cb); + } + + function rmFile(file, done) { + fs.unlink(file, function (err) { + if (err) { + return onError(err); + } + return done(); + }); + } + + function onDir(dir) { + var target = dir.name.replace(currentPath, targetPath); + isWritable(target, function (writable) { + if (writable) { + return mkDir(dir, target); + } + copyDir(dir.name); + }); + } + + function mkDir(dir, target) { + fs.mkdir(target, dir.mode, function (err) { + if (err) { + return onError(err); + } + copyDir(dir.name); + }); + } + + function copyDir(dir) { + fs.readdir(dir, function (err, items) { + if (err) { + return onError(err); + } + items.forEach(function (item) { + startCopy(dir + '/' + item); + }); + return cb(); + }); + } + + function onLink(link) { + var target = link.replace(currentPath, targetPath); + fs.readlink(link, function (err, resolvedPath) { + if (err) { + return onError(err); + } + checkLink(resolvedPath, target); + }); + } + + function checkLink(resolvedPath, target) { + isWritable(target, function (writable) { + if (writable) { + return makeLink(resolvedPath, target); + } + fs.readlink(target, function (err, targetDest) { + if (err) { + return onError(err); + } + if (targetDest === resolvedPath) { + return cb(); + } + return rmFile(target, function () { + makeLink(resolvedPath, target); + }); + }); + }); + } + + function makeLink(linkPath, target) { + fs.symlink(linkPath, target, function (err) { + if (err) { + return onError(err); + } + return cb(); + }); + } + + function isWritable(path, done) { + fs.lstat(path, function (err, stats) { + if (err) { + if (err.code === 'ENOENT') return done(true); + return done(false); + } + return done(false); + }); + } + + function onError(err) { + if (options.stopOnError) { + return callback(err); + } + else if (!errs && options.errs) { + errs = fs.createWriteStream(options.errs); + } + else if (!errs) { + errs = []; + } + if (typeof errs.write === 'undefined') { + errs.push(err); + } + else { + errs.write(err.stack + '\n\n'); + } + return cb(); + } + + function cb(skipped) { + if (!skipped) running--; + finished++; + if ((started === finished) && (running === 0)) { + return errs ? callback(errs) : callback(null); + } + } +}; + + diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/package.json b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/package.json new file mode 100644 index 00000000..7c87da71 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/package.json @@ -0,0 +1,41 @@ +{ + "name": "ncp", + "version": "0.4.2", + "author": { + "name": "AvianFlu", + "email": "charlie@charlieistheman.com" + }, + "description": "Asynchronous recursive file copy utility.", + "bin": { + "ncp": "./bin/ncp" + }, + "devDependencies": { + "vows": "0.6.x", + "rimraf": "1.0.x", + "read-dir-files": "0.0.x" + }, + "main": "./lib/ncp.js", + "repository": { + "type": "git", + "url": "https://github.com/AvianFlu/ncp.git" + }, + "keywords": [ + "cli", + "copy" + ], + "license": "MIT", + "engine": { + "node": ">=0.4" + }, + "scripts": { + "test": "vows --isolate --spec" + }, + "readme": "# ncp - Asynchronous recursive file & directory copying\n\n[![Build Status](https://secure.travis-ci.org/AvianFlu/ncp.png)](http://travis-ci.org/AvianFlu/ncp)\n\nThink `cp -r`, but pure node, and asynchronous. `ncp` can be used both as a CLI tool and programmatically.\n\n## Command Line usage\n\nUsage is simple: `ncp [source] [dest] [--limit=concurrency limit]\n[--filter=filter] --stopOnErr`\n\nThe 'filter' is a Regular Expression - matched files will be copied.\n\nThe 'concurrency limit' is an integer that represents how many pending file system requests `ncp` has at a time.\n\n'stopOnErr' is a boolean flag that will tell `ncp` to stop immediately if any\nerrors arise, rather than attempting to continue while logging errors.\n\nIf there are no errors, `ncp` will output `done.` when complete. If there are errors, the error messages will be logged to `stdout` and to `./ncp-debug.log`, and the copy operation will attempt to continue.\n\n## Programmatic usage\n\nProgrammatic usage of `ncp` is just as simple. The only argument to the completion callback is a possible error. \n\n```javascript\nvar ncp = require('ncp').ncp;\n\nncp.limit = 16;\n\nncp(source, destination, function (err) {\n if (err) {\n return console.error(err);\n }\n console.log('done!');\n});\n```\n\nYou can also call ncp like `ncp(source, destination, options, callback)`. \n`options` should be a dictionary. Currently, such options are available:\n\n * `options.filter` - a `RegExp` instance, against which each file name is\n tested to determine whether to copy it or not, or a function taking single\n parameter: copied file name, returning `true` or `false`, determining\n whether to copy file or not.\n\n * `options.transform` - a function: `function (read, write) { read.pipe(write) }`\n used to apply streaming transforms while copying.\n\n * `options.clobber` - boolean=true. if set to false, `ncp` will not overwrite \n destination files that already exist.\n\nPlease open an issue if any bugs arise. As always, I accept (working) pull requests, and refunds are available at `/dev/null`.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/AvianFlu/ncp/issues" + }, + "homepage": "https://github.com/AvianFlu/ncp", + "_id": "ncp@0.4.2", + "_from": "ncp@~0.4.2" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/a b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/a new file mode 100644 index 00000000..802992c4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/a @@ -0,0 +1 @@ +Hello world diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/b b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/b new file mode 100644 index 00000000..9f6bb185 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/b @@ -0,0 +1 @@ +Hello ncp diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/c b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/c new file mode 100644 index 00000000..e69de29b diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/d b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/d new file mode 100644 index 00000000..e69de29b diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/e b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/e new file mode 100644 index 00000000..e69de29b diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/f b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/f new file mode 100644 index 00000000..e69de29b diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/sub/a b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/sub/a new file mode 100644 index 00000000..cf291b5e --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/sub/a @@ -0,0 +1 @@ +Hello nodejitsu diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/sub/b b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/fixtures/src/sub/b new file mode 100644 index 00000000..e69de29b diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/ncp-test.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/ncp-test.js new file mode 100644 index 00000000..3c613f77 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/ncp/test/ncp-test.js @@ -0,0 +1,86 @@ +var assert = require('assert'), + path = require('path'), + rimraf = require('rimraf'), + vows = require('vows'), + readDirFiles = require('read-dir-files'), + ncp = require('../').ncp; + +var fixtures = path.join(__dirname, 'fixtures'), + src = path.join(fixtures, 'src'), + out = path.join(fixtures, 'out'); + +vows.describe('ncp').addBatch({ + 'When copying a directory of files': { + topic: function () { + var cb = this.callback; + rimraf(out, function () { + ncp(src, out, cb); + }); + }, + 'files should be copied': { + topic: function () { + var cb = this.callback; + + readDirFiles(src, 'utf8', function (srcErr, srcFiles) { + readDirFiles(out, 'utf8', function (outErr, outFiles) { + cb(outErr, srcFiles, outFiles); + }); + }); + }, + 'and the destination should match the source': function (err, srcFiles, outFiles) { + assert.isNull(err); + assert.deepEqual(srcFiles, outFiles); + } + } + } +}).addBatch({ + 'When copying files using filter': { + topic: function() { + var cb = this.callback; + var filter = function(name) { + return name.substr(name.length - 1) != 'a' + } + rimraf(out, function () { + ncp(src, out, {filter: filter}, cb); + }); + }, + 'it should copy files': { + topic: function () { + var cb = this.callback; + + readDirFiles(src, 'utf8', function (srcErr, srcFiles) { + function filter(files) { + for (var fileName in files) { + var curFile = files[fileName]; + if (curFile instanceof Object) + return filter(curFile); + if (fileName.substr(fileName.length - 1) == 'a') + delete files[fileName]; + } + } + filter(srcFiles); + readDirFiles(out, 'utf8', function (outErr, outFiles) { + cb(outErr, srcFiles, outFiles); + }); + }); + }, + 'and destination files should match source files that pass filter': function (err, srcFiles, outFiles) { + assert.isNull(err); + assert.deepEqual(srcFiles, outFiles); + } + } + } +}).addBatch({ + 'When copying files using transform': { + 'it should pass file descriptors along to transform functions': function() { + ncp(src, out, { + transform: function(read,write,file) { + assert.notEqual(file.name, undefined); + assert.strictEqual(typeof file.mode,'number'); + read.pipe(write); + } + }, function(){}); + } + } +}).export(module); + diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/AUTHORS b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/AUTHORS new file mode 100644 index 00000000..247b7543 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/AUTHORS @@ -0,0 +1,6 @@ +# Authors sorted by whether or not they're me. +Isaac Z. Schlueter <i@izs.me> (http://blog.izs.me) +Wayne Larsen <wayne@larsen.st> (http://github.com/wvl) +ritch <skawful@gmail.com> +Marcel Laverdet +Yosef Dinerstein <yosefd@microsoft.com> diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/LICENSE b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/LICENSE new file mode 100644 index 00000000..05a40109 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/LICENSE @@ -0,0 +1,23 @@ +Copyright 2009, 2010, 2011 Isaac Z. Schlueter. +All rights reserved. + +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-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/README.md b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/README.md new file mode 100644 index 00000000..cd123b65 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/README.md @@ -0,0 +1,30 @@ +`rm -rf` for node. + +Install with `npm install rimraf`, or just drop rimraf.js somewhere. + +## API + +`rimraf(f, callback)` + +The callback will be called with an error if there is one. Certain +errors are handled for you: + +* Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of + `opts.maxBusyTries` times before giving up. +* `ENOENT` - If the file doesn't exist, rimraf will return + successfully, since your desired outcome is already the case. + +## rimraf.sync + +It can remove stuff synchronously, too. But that's not so good. Use +the async API. It's better. + +## CLI + +If installed with `npm install rimraf -g` it can be used as a global +command `rimraf <path>` which is useful for cross platform support. + +## mkdirp + +If you need to create a directory recursively, check out +[mkdirp](https://github.com/substack/node-mkdirp). diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/bin.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/bin.js new file mode 100755 index 00000000..29bfa8a6 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/bin.js @@ -0,0 +1,33 @@ +#!/usr/bin/env node + +var rimraf = require('./') + +var help = false +var dashdash = false +var args = process.argv.slice(2).filter(function(arg) { + if (dashdash) + return !!arg + else if (arg === '--') + dashdash = true + else if (arg.match(/^(-+|\/)(h(elp)?|\?)$/)) + help = true + else + return !!arg +}); + +if (help || args.length === 0) { + // If they didn't ask for help, then this is not a "success" + var log = help ? console.log : console.error + log('Usage: rimraf <path>') + log('') + log(' Deletes all files and folders at "path" recursively.') + log('') + log('Options:') + log('') + log(' -h, --help Display this usage info') + process.exit(help ? 0 : 1) +} else { + args.forEach(function(arg) { + rimraf.sync(arg) + }) +} diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/package.json b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/package.json new file mode 100644 index 00000000..71f7dea0 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/package.json @@ -0,0 +1,56 @@ +{ + "name": "rimraf", + "version": "2.2.6", + "main": "rimraf.js", + "description": "A deep deletion module for node (like `rm -rf`)", + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "license": { + "type": "MIT", + "url": "https://github.com/isaacs/rimraf/raw/master/LICENSE" + }, + "repository": { + "type": "git", + "url": "git://github.com/isaacs/rimraf.git" + }, + "scripts": { + "test": "cd test && bash run.sh" + }, + "bin": { + "rimraf": "./bin.js" + }, + "contributors": [ + { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me" + }, + { + "name": "Wayne Larsen", + "email": "wayne@larsen.st", + "url": "http://github.com/wvl" + }, + { + "name": "ritch", + "email": "skawful@gmail.com" + }, + { + "name": "Marcel Laverdet" + }, + { + "name": "Yosef Dinerstein", + "email": "yosefd@microsoft.com" + } + ], + "readme": "`rm -rf` for node.\n\nInstall with `npm install rimraf`, or just drop rimraf.js somewhere.\n\n## API\n\n`rimraf(f, callback)`\n\nThe callback will be called with an error if there is one. Certain\nerrors are handled for you:\n\n* Windows: `EBUSY` and `ENOTEMPTY` - rimraf will back off a maximum of\n `opts.maxBusyTries` times before giving up.\n* `ENOENT` - If the file doesn't exist, rimraf will return\n successfully, since your desired outcome is already the case.\n\n## rimraf.sync\n\nIt can remove stuff synchronously, too. But that's not so good. Use\nthe async API. It's better.\n\n## CLI\n\nIf installed with `npm install rimraf -g` it can be used as a global\ncommand `rimraf <path>` which is useful for cross platform support.\n\n## mkdirp\n\nIf you need to create a directory recursively, check out\n[mkdirp](https://github.com/substack/node-mkdirp).\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/isaacs/rimraf/issues" + }, + "homepage": "https://github.com/isaacs/rimraf", + "_id": "rimraf@2.2.6", + "_from": "rimraf@~2.2.0" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/rimraf.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/rimraf.js new file mode 100644 index 00000000..ce62051f --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/rimraf.js @@ -0,0 +1,178 @@ +module.exports = rimraf +rimraf.sync = rimrafSync + +var path = require("path") +var fs = require("fs") + +// for EMFILE handling +var timeout = 0 +exports.EMFILE_MAX = 1000 +exports.BUSYTRIES_MAX = 3 + +var isWindows = (process.platform === "win32") + +function rimraf (p, cb) { + if (!cb) throw new Error("No callback passed to rimraf()") + + var busyTries = 0 + rimraf_(p, function CB (er) { + if (er) { + if (isWindows && (er.code === "EBUSY" || er.code === "ENOTEMPTY") && + busyTries < exports.BUSYTRIES_MAX) { + busyTries ++ + var time = busyTries * 100 + // try again, with the same exact callback as this one. + return setTimeout(function () { + rimraf_(p, CB) + }, time) + } + + // this one won't happen if graceful-fs is used. + if (er.code === "EMFILE" && timeout < exports.EMFILE_MAX) { + return setTimeout(function () { + rimraf_(p, CB) + }, timeout ++) + } + + // already gone + if (er.code === "ENOENT") er = null + } + + timeout = 0 + cb(er) + }) +} + +// Two possible strategies. +// 1. Assume it's a file. unlink it, then do the dir stuff on EPERM or EISDIR +// 2. Assume it's a directory. readdir, then do the file stuff on ENOTDIR +// +// Both result in an extra syscall when you guess wrong. However, there +// are likely far more normal files in the world than directories. This +// is based on the assumption that a the average number of files per +// directory is >= 1. +// +// If anyone ever complains about this, then I guess the strategy could +// be made configurable somehow. But until then, YAGNI. +function rimraf_ (p, cb) { + fs.unlink(p, function (er) { + if (er) { + if (er.code === "ENOENT") + return cb(null) + if (er.code === "EPERM") + return (isWindows) ? fixWinEPERM(p, er, cb) : rmdir(p, er, cb) + if (er.code === "EISDIR") + return rmdir(p, er, cb) + } + return cb(er) + }) +} + +function fixWinEPERM (p, er, cb) { + fs.chmod(p, 666, function (er2) { + if (er2) + cb(er2.code === "ENOENT" ? null : er) + else + fs.stat(p, function(er3, stats) { + if (er3) + cb(er3.code === "ENOENT" ? null : er) + else if (stats.isDirectory()) + rmdir(p, er, cb) + else + fs.unlink(p, cb) + }) + }) +} + +function fixWinEPERMSync (p, er, cb) { + try { + fs.chmodSync(p, 666) + } catch (er2) { + if (er2.code !== "ENOENT") + throw er + } + + try { + var stats = fs.statSync(p) + } catch (er3) { + if (er3 !== "ENOENT") + throw er + } + + if (stats.isDirectory()) + rmdirSync(p, er) + else + fs.unlinkSync(p) +} + +function rmdir (p, originalEr, cb) { + // try to rmdir first, and only readdir on ENOTEMPTY or EEXIST (SunOS) + // if we guessed wrong, and it's not a directory, then + // raise the original error. + fs.rmdir(p, function (er) { + if (er && (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM")) + rmkids(p, cb) + else if (er && er.code === "ENOTDIR") + cb(originalEr) + else + cb(er) + }) +} + +function rmkids(p, cb) { + fs.readdir(p, function (er, files) { + if (er) + return cb(er) + var n = files.length + if (n === 0) + return fs.rmdir(p, cb) + var errState + files.forEach(function (f) { + rimraf(path.join(p, f), function (er) { + if (errState) + return + if (er) + return cb(errState = er) + if (--n === 0) + fs.rmdir(p, cb) + }) + }) + }) +} + +// this looks simpler, and is strictly *faster*, but will +// tie up the JavaScript thread and fail on excessively +// deep directory trees. +function rimrafSync (p) { + try { + fs.unlinkSync(p) + } catch (er) { + if (er.code === "ENOENT") + return + if (er.code === "EPERM") + return isWindows ? fixWinEPERMSync(p, er) : rmdirSync(p, er) + if (er.code !== "EISDIR") + throw er + rmdirSync(p, er) + } +} + +function rmdirSync (p, originalEr) { + try { + fs.rmdirSync(p) + } catch (er) { + if (er.code === "ENOENT") + return + if (er.code === "ENOTDIR") + throw originalEr + if (er.code === "ENOTEMPTY" || er.code === "EEXIST" || er.code === "EPERM") + rmkidsSync(p) + } +} + +function rmkidsSync (p) { + fs.readdirSync(p).forEach(function (f) { + rimrafSync(path.join(p, f)) + }) + fs.rmdirSync(p) +} diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/run.sh b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/run.sh new file mode 100644 index 00000000..598f0163 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/run.sh @@ -0,0 +1,10 @@ +#!/bin/bash +set -e +for i in test-*.js; do + echo -n $i ... + bash setup.sh + node $i + ! [ -d target ] + echo "pass" +done +rm -rf target diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/setup.sh b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/setup.sh new file mode 100644 index 00000000..2602e631 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/setup.sh @@ -0,0 +1,47 @@ +#!/bin/bash + +set -e + +files=10 +folders=2 +depth=4 +target="$PWD/target" + +rm -rf target + +fill () { + local depth=$1 + local files=$2 + local folders=$3 + local target=$4 + + if ! [ -d $target ]; then + mkdir -p $target + fi + + local f + + f=$files + while [ $f -gt 0 ]; do + touch "$target/f-$depth-$f" + let f-- + done + + let depth-- + + if [ $depth -le 0 ]; then + return 0 + fi + + f=$folders + while [ $f -gt 0 ]; do + mkdir "$target/folder-$depth-$f" + fill $depth $files $folders "$target/d-$depth-$f" + let f-- + done +} + +fill $depth $files $folders $target + +# sanity assert +[ -d $target ] diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/test-async.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/test-async.js new file mode 100644 index 00000000..9c2e0b7b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/test-async.js @@ -0,0 +1,5 @@ +var rimraf = require("../rimraf") + , path = require("path") +rimraf(path.join(__dirname, "target"), function (er) { + if (er) throw er +}) diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/test-sync.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/test-sync.js new file mode 100644 index 00000000..eb71f104 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/node_modules/rimraf/test/test-sync.js @@ -0,0 +1,3 @@ +var rimraf = require("../rimraf") + , path = require("path") +rimraf.sync(path.join(__dirname, "target")) diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/package.json b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/package.json new file mode 100755 index 00000000..03491b04 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/fs-extra/package.json @@ -0,0 +1,64 @@ +{ + "name": "fs-extra", + "version": "0.8.1", + "description": "fs-extra contains methods that aren't included in the vanilla Node.js fs package. Such as mkdir -p, cp -r, and rm -rf.", + "homepage": "https://github.com/jprichardson/node-fs-extra", + "repository": { + "type": "git", + "url": "https://github.com/jprichardson/node-fs-extra" + }, + "keywords": [ + "fs", + "file", + "file system", + "copy", + "directory", + "extra", + "mkdirp", + "mkdir", + "mkdirs", + "recursive", + "json", + "read", + "write", + "extra", + "delete", + "remove", + "touch", + "create", + "text", + "output" + ], + "author": { + "name": "JP Richardson", + "email": "jprichardson@gmail.com" + }, + "licenses": [ + { + "type": "MIT", + "url": "http://github.com/jprichardson/node-fs-extra/raw/master/LICENSE" + } + ], + "dependencies": { + "ncp": "~0.4.2", + "mkdirp": "0.3.x", + "jsonfile": "~1.1.0", + "rimraf": "~2.2.0" + }, + "devDependencies": { + "mocha": "*", + "path-extra": "0.0.x", + "testutil": "~0.5.0" + }, + "main": "./lib/index", + "scripts": { + "test": "mocha test" + }, + "readme": "\nNode.js: fs-extra\n=================\n\n[![build status](https://secure.travis-ci.org/jprichardson/node-fs-extra.png)](http://travis-ci.org/jprichardson/node-fs-extra)\n\nThis module adds a few extra file system methods that aren't included in the native `fs` module. It is a drop in replacement for `fs`.\n\n\n\nWhy?\n----\n\nI got tired of including `mkdirp`, `rimraf`, and `cp -r` in most of my projects. \n\n\n\n\nInstallation\n------------\n\n npm install --save fs-extra\n\n\n\nUsage\n-----\n\n`fs-extra` is a drop in replacement for native `fs`. All methods in `fs` are unmodified and attached to `fs-extra`.\n\nYou don't ever need to include the original `fs` module again:\n\n```javascript\nvar fs = require('fs') //this is no longer necessary\n```\n\nyou can now do this:\n\n```javascript\nvar fs = require('fs-extra'); //var fs = require('fs')\n```\n\nor if you prefer to make it clear that you're using `fs-extra` and not `fs`, you may want \nto do this:\n\n```javascript\n//var fs = require('fs')\nvar fse = require('fs-extra')\n```\n\nyou can also keep, both, but it's redundant:\n\n```javascript\nvar fs = require('fs')\n , fse = require('fs-extra')\n```\n\n\n\nMethods\n-------\n\n**NOTE:** You can still use the native Node.js methods. They are copied over to `fs-extra`.\n\n\n### copy(src, dest, [filter], callback)\n\nCopy a file or directory. The directory can have contents. Like `cp -r`. There isn't a synchronous version implemented yet.\n\nSync: `copySync()`\n\n\nExamples:\n\n```javascript\nvar fs = require('fs-extra');\n\nfs.copy('/tmp/myfile', '/tmp/mynewfile', function(err){\n if (err) return console.error(err);\n\n console.log(\"success!\")\n}); //copies file\n\nfs.copy('/tmp/mydir', '/tmp/mynewdir', function(err){\n if (err) return console.error(err);\n \n console.log(\"success!\")\n}); //copies directory, even if it has subdirectories or files\n```\n\n\n### createFile(file, callback) \n\nCreates a file. If the file that is requested to be created is in directories that do not exist, these directories are created. If the file already exists, it is **NOT MODIFIED**.\n\nSync: `createFileSync()`\n\n\nExample:\n\n```javascript\nvar fs = require('fs-extra')\n\nvar file = '/tmp/this/path/does/not/exist/file.txt'\n\nfs.createFile(file, function(err) {\n console.log(err); //null\n //file has now been created, including the directory it is to be placed in\n})\n```\n\n\n\n### mkdirs(dir, callback) \n\nCreates a directory. If the parent hierarchy doesn't exist, it's created. Like `mkdir -p`.\n\nAlias: `mkdirp()`\n\nSync: `mkdirsSync()` / `mkdirpSync()`\n\n\nExamples:\n\n```javascript\nvar fs = require('fs-extra');\n\nfs.mkdirs('/tmp/some/long/path/that/prob/doesnt/exist', function(err){\n if (err) return console.error(err);\n \n console.log(\"success!\")\n});\n\nfs.mkdirsSync('/tmp/another/path');\n```\n\n\n### outputFile(file, data, callback)\n\nAlmost the same as `writeFile`, except that if the directory does not exist, it's created.\n\nSync: `outputFileSync()`\n\n\nExample:\n\n```javascript\nvar fs = require('fs-extra')\nvar file = '/tmp/this/path/does/not/exist/file.txt'\n\nfs.outputFile(file, 'hello!', function(err) {\n console.log(err); //null\n\n fs.readFile(file, 'utf8', function(err, data) {\n console.log(data); //hello!\n })\n})\n```\n\n\n\n### outputJson(file, data, callback)\n\nAlmost the same as `writeJson`, except that if the directory does not exist, it's created.\n\nAlias: `outputJSON()\n\nSync: `outputJsonSync()`, `outputJSONSync()`\n\n\nExample:\n\n```javascript\nvar fs = require('fs-extra')\nvar file = '/tmp/this/path/does/not/exist/file.txt'\n\nfs.outputJson(file, {name: 'JP'}, function(err) {\n console.log(err); //null\n\n fs.readJson(file, function(err, data) {\n console.log(data.name); //'JP\n })\n})\n```\n\n\n\n### readJson(file, [options], callback) \n\nReads a JSON file and then parses it into an object. `options` are the same that you'd pass to `fs.readFile`.\n\nAlias: `readJSON()`\n\nSync: `readJsonSync()`, `readJSONSync()`\n\n\nExample:\n\n```javascript\nvar fs = require('fs-extra');\n\nfs.readJson('./package.json', function(err, packageObj) {\n console.log(packageObj.version); //0.1.3\n});\n```\n\n\n### remove(dir, callback)\n\nRemoves a file or directory. The directory can have contents. Like `rm -rf`.\n\nAlias: `delete()`\n\nSync: `removeSync()` / `deleteSync()`\n\n\nExamples:\n\n```javascript\nvar fs = require('fs-extra');\n\nfs.remove('/tmp/myfile', function(err){\n if (err) return console.error(err);\n \n console.log(\"success!\")\n});\n\nfs.removeSync('/home/jprichardson'); //I just deleted my entire HOME directory. \n```\n\n\n\n### writeJson(file, object, [options], callback) \n\nWrites an object to a JSON file. `options` are the same that you'd pass to `fs.readFile`.\n\nAlias: `writeJSON()`\n\nSync: `writeJsonSync()`, `writeJSONSync()`\n\nExample:\n\n```javascript\nvar fs = require('fs-extra');\nfs.writeJson('./package.json', {name: 'fs-extra'}, function(err){\n console.log(err);\n});\n```\n\n\n\nRoadmap to 1.0.0\n-----------------\n\nThis contains items that I'm considering doing. I'd love community feedback.\n\n* File system walker. I really like this one: https://github.com/daaku/nodejs-walker ... this might be adding too much. Thoughts?\n* File/directory tree watcher. There are quite a few. ... this also might be adding too much. I like this one: https://github.com/paulmillr/chokidar but I don't like that it's written in CoffeeScript. Thoughts?\n* Method to move files.\n* Thinking about moving `rimraf`, `ncp`, and `mkdirps` code into this library. I'd like fs-extra to be a stable library that module authors\ncan depend upon. A bunch of other dependencies kinda sucks for modules/libraries. (I'm leaning against this now.)\n* Change documentation to use the `fse` prefix instead of `fs`. This may encourage people to start using `fse` as a prefix and hence make their code clearer that they're not using the native `fs`. I'm very undecided on this one since `fs-extra` is a drop in replacement for the native `fs`. (I'm leaning against this now.)\n\n\n\nNaming\n------\n\nI put a lot of thought into the naming of these functions. Inspired by @coolaj86's request. So he deserves much of the credit for raising the issue. See discussion(s) here:\n\n* https://github.com/jprichardson/node-fs-extra/issues/2\n* https://github.com/flatiron/utile/issues/11\n* https://github.com/ryanmcgrath/wrench-js/issues/29\n* https://github.com/substack/node-mkdirp/issues/17\n\nFirst, I believe that in as many cases as possible, the [Node.js naming schemes](http://nodejs.org/api/fs.html) should be chosen. However, there are problems with the Node.js own naming schemes.\n\nFor example, `fs.readFile()` and `fs.readdir()`: the **F** is capitalized in *File* and the **d** is not capitalized in *dir*. Perhaps a bit pedantic, but they should still be consistent. Also, Node.js has chosen a lot of POSIX naming schemes, which I believe is great. See: `fs.mkdir()`, `fs.rmdir()`, `fs.chown()`, etc.\n\nWe have a dilemma though. How do you consistently name methods that perform the following POSIX commands: `cp`, `cp -r`, `mkdir -p`, and `rm -rf`?\n\nMy perspective: when in doubt, err on the side of simplicity. A directory is just a hierarchical grouping of directories and files. Consider that for a moment. So when you want to copy it or remove it, in most cases you'll want to copy or remove all of its contents. When you want to create a directory, if the directory that it's suppose to be contained in does not exist, then in most cases you'll want to create that too. \n\nSo, if you want to remove a file or a directory regardless of whether it has contents, just call `fs.remove(path)` or its alias `fs.delete(path)`. If you want to copy a file or a directory whether it has contents, just call `fs.copy(source, destination)`. If you want to create a directory regardless of whether its parent directories exist, just call `fs.mkdirs(path)` or `fs.mkdirp(path)`. \n\n\nCredit\n------\n\n`fs-extra` wouldn't be possible without using the modules from the following authors:\n\n- [Isaac Shlueter](https://github.com/isaacs)\n- [Charlie McConnel](https://github.com/avianflu)\n- [James Halliday](https://github.com/substack)\n\n\nContributions\n-------------\n\nIf you want to contribute, please add a test if you can. Also, don't change the version in `package.json`.\n\n\n### Contributors\n\n- [JP Richardson](https://github.com/jprichardson)\n- [Mike McNeil](https://github.com/mikermcneil)\n- [Ian Crowther](https://github.com/iancrowther)\n- [Stephen Mathieson](https://github.com/stephenmathieson)\n- [Srirangan](https://github.com/Srirangan)\n- [Uli Köhler](https://github.com/ulikoehler)\n- `<your name here>`\n\n\n\n\nLicense\n-------\n\n\nLicensed under MIT\n\nCopyright (c) 2011-2013 JP Richardson\n\n[1]: http://nodejs.org/docs/latest/api/fs.html \n\n\n[jsonfile]: https://github.com/jprichardson/node-jsonfile\n\n\n\n\n\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/jprichardson/node-fs-extra/issues" + }, + "_id": "fs-extra@0.8.1", + "_from": "fs-extra@~0.8.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/ChangeLog.md b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/ChangeLog.md new file mode 100644 index 00000000..a073af2e --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/ChangeLog.md @@ -0,0 +1,12 @@ +## 0.2 “Duke Dantalion” +* Add source map support. +* Add shortcuts to create nodes. +* Method `process()` now returns object with `css` and `map` keys. +* Origin CSS file option was renamed from `file` to `from`. +* Rename `Node#remove()` method to `removeSelf()` to fix name conflict. +* Node source was moved to `source` property with origin file + and node end position. +* You can set own stringify function. + +## 0.1 “Count Andromalius” +* Initial release. diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/LICENSE b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/LICENSE new file mode 100644 index 00000000..da057b45 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/LICENSE @@ -0,0 +1,20 @@ +The MIT License (MIT) + +Copyright 2013 Andrey Sitnik <andrey@sitnik.ru> + +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-autoprefixer/node_modules/autoprefixer/node_modules/postcss/README.md b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/README.md new file mode 100644 index 00000000..32a70b42 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/README.md @@ -0,0 +1,571 @@ +# PostCSS + +PostCSS is a framework for CSS postprocessors, +to modify CSS by your JS function. + +It takes care of most common CSS tool tasks: + +1. parses CSS; +2. gives you usable JS API to edit CSS node tree; +3. saves modified node tree to new CSS; +4. generates (or modifies existent) source map for your changes; + +You can use this framework to write you own: + +* CSS minifier or beautifizer. +* Grunt plugin to generate sprites, include `data-uri` images + or any other works. +* Text editor plugin to automate CSS routine. +* Command-line CSS tool. + +Sponsored by [Evil Martians](http://evilmartians.com/). + +## Build with PostCSS + +* [Autoprefixer](https://github.com/ai/autoprefixer) +* [grunt-pixrem](https://github.com/robwierzbowski/grunt-pixrem) + +## Quick Example + +Let’s fix forgotten `content` property in `::before` and `::after`: + +```js +var postcss = require('postcss'); + +var contenter = postcss(function (css) { + css.eachRule(function (rule) { + if ( rule.selector.match(/::(before|after)/) ) { + // In every ::before/::after rule + + // Did we forget content property? + var good = rule.some(function (i) { return i.prop == 'content'; }); + + if ( !good ) { + // Add content: '' if we forget it + rule.prepend({ prop: 'content', value: '""' }); + } + + } + }); +}); +``` + +And then CSS with forgotten `content`: + +```css +a::before { + width: 10px; + height: 10px +} +``` + +will be fixed by our new `contenter`: + +```js +var fixed = contenter.process(css).css; +``` + +to: + +```css +a::before { + content: ""; + width: 10px; + height: 10px +} +``` + +## Features + +### Source Map + +PostCSS generates source map for its transformations: + +```js +result = processor.process(css, { map: true, from: 'from.css', to: 'to.css' }); +result.css // String with processed CSS +result.map // Source map +``` + +And modifies source map from previous step (like Sass preprocessor): + +```js +var sassMap = fs.readFileSync('from.sass.map'); +processor.process(css, { map: sassMap, from: 'from.sass.css', to: 'to.css' }); +``` + +### Preserves code formatting and indentations + +PostCSS will not change any byte of rule if you don't modify node: + +```js +postcss(function (css) { }).process(css).css == css; +``` + +And when you modify CSS nodes, PostCSS will try to copy coding style: + +```js +contenter.process("a::before{color: black}") +// a::before{content: '';color: black} + +contenter.process("a::before {\n color: black;\n }") +// a::before { +// content: ''; +// color: black; +// } +``` + +## Why PostCSS Better Than … + +### Preprocessors + +Preprocessors (like Sass or Stylus) give us special language with variables, +mixins, statements and compile it to CSS. Compass, nib and other mixins +libraries use this languages to work with prefixes, sprites and inline images. + +But Sass and Stylus languages were created to be syntax-sugar for CSS. +Writing really complicated programs using preporcessor languages is very difficult. +[Autoprefixer] is absolutely impossible on Sass. + +PostCSS gives you comfort and power of JS or CoffeeScript to working with CSS. +You can do really magic things with wide range of [npm] libraries. + +But postprocessors are not enemies for preprocessors. Sass and Stylus is still +the best way to improve readability and add some syntax sugar to CSS. You can easily combine preprocessors and postprocessors. + +[Autoprefixer]: https://github.com/ai/autoprefixer +[npm]: https://npmjs.org/ + +### RegExp + +Some Grunt plugins modify CSS with regular expressions. But CSS parser and +node tree are much safer way to edit CSS. Also regexps will break source maps +generated by preprocessors. + +### CSS Parsers + +There are a lot of good CSS parsers, like [Gonzales]. But they help you only +with first step. + +Unlike them PostCSS gives you useful high level API (for example, +safe iterators) and changes source map generator (or modifier for existing +source map from preprocessors). + +[Gonzales]: https://github.com/css/gonzales + +### Rework + +[Rework] was a first CSS postprocessors framework. PostCSS is very similar +to it. + +But Rework has no high level API and rewrite your CSS code style +and indentations. So it can’t be used in text editor plugins. + +Unlike it PostCSS preserves all spaces and code formatting. +If you don't change rule, output will be byte‑to‑byte equal. + +[Rework]: https://github.com/visionmedia/rework + +## Usage + +### Processor + +Function `postcss(fn)` creates processor by your function: + +```js +var postcss = require('postcss'); + +var processor = postcss(function (css) { + // Code to modify CSS +}); +``` + +If you want to combine multiple processors (and parse CSS only once), +you can create empty processor and add several functions by `use(fn)` method: + +```js +var all = postcss(). + use(prefixer). + use(minifing); +``` + +Processor function can just change current CSS node tree: + +```js +postcss(function (css) { + css.append( /* new rule */ ) +}); +``` + +or create totally new CSS root and return it: + +```js +postcss(function (css) { + var newCSS = postcss.root() + // Add rules and declarations + return newCSS; +}); +``` + +Processor will transform some CSS by `process(css, opts)` method: + +```js +var doubler = postcss(function (css) { + // Clone each declaration + css.eachDecl(function (decl) { + decl.parent.prepend( decl.clone() ); + }); +}); + +var css = "a { color: black; }"; +var result = processor.process(css); + +result.css //=> "a { color: black; color: black; }" +``` + +You can set original CSS filename by `from` options and make syntax error +messages much more helpful: + +```js +var wrong = "a {"; +processor.process(wrong, { from: 'main.css' }); +//=> Can't parse CSS: Unclosed block at line 1:1 in main.css +``` +### Source Map + +PostCSS will generate source map, if you set `map` option to `true` +in `process(css, opts)` method. + +You must set input and output CSS files paths (by `from` and `to` options) +to generate correct map. + +```js +var result = processor.process(css, { + map: true, + from: 'main.css', + to: 'main.out.css' +}); + +result.map //=> '{"version":3,"file":"main.out.css","sources":["main.css"],"names":[],"mappings":"AAAA,KAAI"}' + +fs.writeFileSync('main.out.map', result.map); +``` + +PostCSS can also modify previous source map (for example, from Sass +compilation). So, if you compile: Sass to CSS and then minify CSS +by postprocessor, final source map will contain mapping from Sass code +to minified CSS. + +Just set original source map content (as string or JS object) +to `map` option: + +```js +var result = minifier.process(css, { + map: fs.readFileSync('main.sass.map'), + from: 'main.sass.css', + to: 'main.min.css' +}); + +result.map //=> Source map from main.sass to main.min.css +``` + +### Nodes + +Processor function will receive `Root` node with CSS node tree inside. + +```js +var processor = postcss(function (cssRoot) { +}); +``` + +There are 3 types of child nodes: `AtRule`, `Rule` and `Declaration`. +All nodes contain `toString()` and `clone()` methods. + +You can parse CSS and get `Root` node by `postcss.parse(css, opts)` method: + +```js +var postcss = require('postcss'); + +var cssRoot = postcss.parse('a { }'); +``` + +### Node Source + +Every node stores it origin file (if you set `from` option to `process` +or `parse` method) and position at `source` property: + +``` +var root = postcss.parse(css, { from: 'main.css' }); +var rule = root.rules[1]; + +rule.source.file //=> 'main.css' +rule.source.start //=> { line: 5, position: 1 } +rule.source.end //=> { line: 10, position: 5 } +``` + +### Whitespaces + +All nodes (exclude `Root`) have `before` property with all earlier spaces and comments. + +Nodes with children (`Root`, `AtRule` and `Rule`) contain also `after` property +with spaces after last child and before `}` or end of file. + +```js +var root = postcss.parse("a {\n color: black;\n}\n"); + +root.after //=> "\n" from end of file +root.rules[0].after //=> "\n" before } +root.rules[0].decls[0].before //=> "\n " before color: black +``` + +So, the simplest way to minify CSS is to clean `before` and `after` properties: + +```js +var minifier = postcss(function (css) { + css.eachDecl(function (decl) { + decl.before = ''; + }); + css.eachRule(function (rule) { + rule.before = ''; + rule.after = ''; + }); + css.eachAtRule(function (atRule) { + atRule.before = ''; + atRule.after = ''; + }); +}); + +var css = "a{\n color:black\n}\n"; +minifier.process(css).css //=> "a{color:black}" +``` + +### Raw Properties + +Some CSS values (like selectors, at-rule params and declaration values) can +contain comments. PostCSS will clean them for you: + +```js +var root = postcss.parse("a /**/ b {}"); +var ab = root.rules[0]; + +ab.selector //=> 'a b' trimmed and cleaned from comments +``` + +But PostCSS saves raw content to stringify it to CSS, if you don’t +set new value. As you can remember, PostCSS tries to save origin CSS +byte-to-byte, when it’s possible: + +```js +ab.toString() //=> 'a /**/ b {}' with comment + +ab.selector = '.link b'; +ab.toString() //=> '.link b' you change value and magic was gone +``` + +### Containers + +`Root`, `AtRule` and `Rule` nodes can contain children in `rules` or `decls` +property. + +There are common method to work with children: + +* `append(newChild)` to add child at the end of children list. +* `prepend(newChild)` to add child at the beginning of children list. +* `insertBefore(existsChild, newChild)` to insert new child before some + existent children. +* `insertAfter(existsChild, newChild)` to insert new child after some + existent children. +* `remove(child)` to remove child. +* `index(child)` to return child index. +* `some(fn)` to return true if `fn` return true on any child. +* `every(fn)` to return true if `fn` return true on all children. + +Methods `insertBefore`, `insertAfter` and `remove` can receive child node +or child index number as existent child argument. +Have in mind that `index` works much faster. + +### Children + +`AtRule`, `Rule` and `Declaration` nodes should be wrapped in other nodes. + +All children contain `parent` property with parent node: + +```js +rule.decls[0].parent == rule; +``` + +All children has `removeSelf()` method: + +```js +rule.decls[0].removeSelf(); +``` + +But `remove(index)` in parent with child index is much faster: + +```js +rule.each(function (decl, i) { + rule.remove(i); +}); +``` + +### Iterators + +All parent nodes have `each` method to iterate through children nodes: + +```js +root = postcss.parse('a { color: black; display: none }'); + +root.each(function (rule, i) { + console.log(rule.selector, i); // Will log "a 0" +}); + +root.rules[0].each(function (decl, i) { + console.log(decl.prop, i); // Will log "color 0" and "display 1" +}); +``` + +Instead of simple `for` or `Array#forEach()` this iterator is safe. +You can change children inside iteration and it will fix current index: + +```js +rule.rules.forEach(function (decl, i) { + rule.prepend( decl.clone() ); + // Will be infinity cycle, because on prepend current declaration become + // second and next index will go to current declaration again +}); + +rule.each(function (decl, i) { + rule.prepend( decl.clone() ); + // Will work correct (once clone each declaration), because after prepend + // iterator index will be recalculated +}); +``` + +Because CSS is nested structure, PostCSS contains recursive iterator +by node type: + +```js +root.eachDecl(function (decl, i) { + // Each declaration inside root +}); + +root.eachRule(function (rule, i) { + // Each rule inside root and any nested at-rules +}); + +root.eachAtRule(function (atRule, i) { + // Each at-rule inside root and any nested at-rules +}); +``` + +### Root Node + +`Root` node contains all CSS tree. Its children can be only `AtRule` or `Rule` +nodes in `rules` property. + +You can create new root by shortcut: + +```js +var root = postcss.root(); +``` + +Method `toString()` will stringify all current CSS: + +```js +root = postcss.parse(css); +root.toString() == css; +``` + +### AtRule Node + +```css +@charset 'utf-8'; + +@font-face { + font-family: 'Cool' +} + +@media print { + img { display: none } +} +``` + +`AtRule` has two own properties: `name` and `params`. + +As you see, some at-rules don’t contain any children (like `@charset` +or `@import`), some of at-rules can contain only declarations +(like `@font-face` or `@page`), but most of them can contain rules +and nested at-rules (like `@media`, `@keyframes` and others). + +Parser select `AtRule` content type by its name. If you create `AtRule` +node manually, it will detect own content type with new child type on first +`append` or other add method call: + +```js +var atRule = postcss.atRule({ name: '-x-animations' }); +atRule.rules //=> undefined +atRule.decls //=> undefined + +atRule.append( postcss.rule({ selector: 'from' }) ); +atRule.rules.length //=> 1 +atRule.decls //=> undefined +``` + +You can create new at-rule by shortcut: + +```js +var atRule = postcss.atRule({ name: 'charset', params: 'utf-8' }); +``` + +### Rule Node + +```css +a { + color: black; +} +``` + +`Rule` node has `selector` property and contains `Declaration` children +in `decls` property. + +You can miss `Declaration` constructor in `append` and other insert methods: + +```js +rule.append({ prop: 'color', value: 'black' }); +``` + +Property `semicolon` marks does last declaration in rule has semicolon or not: + +```js +var root = postcss.parse('a { color: black }'); +root.rules[0].semicolon //=> false + +var root = postcss.parse('a { color: black; }'); +root.rules[0].semicolon //=> true +``` + +You can create new rule by shortcut: + +```js +var rule = postcss.rule({ selector: 'a' }); +``` + +### Declaration Node + +```css +color: black +``` + +`Declaration` node has `prop` and `value` properties. + +You can create new declaration by shortcut: + +```js +var decl = postcss.decl({ prop: 'color', value: 'black' }); +``` + +Or use short form in `append()` and other add methods: + +```js +rule.append({ prop: 'color', value: 'black' }); +``` diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/at-rule.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/at-rule.js new file mode 100644 index 00000000..973259df --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/at-rule.js @@ -0,0 +1,72 @@ +(function() { + var AtRule, Container, name, _fn, _i, _len, _ref, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Container = require('./container'); + + AtRule = (function(_super) { + __extends(AtRule, _super); + + function AtRule() { + this.type = 'atrule'; + AtRule.__super__.constructor.apply(this, arguments); + } + + AtRule.prototype.addMixin = function(type) { + var mixin, name, value, _ref; + mixin = type === 'rules' ? Container.WithRules : Container.WithDecls; + if (!mixin) { + return; + } + _ref = mixin.prototype; + for (name in _ref) { + value = _ref[name]; + if (name === 'constructor') { + continue; + } + this[name] = value; + } + return mixin.apply(this); + }; + + AtRule.raw('params'); + + AtRule.prototype.stringify = function(builder, last) { + var params, semicolon; + if (this.rules || this.decls) { + params = this._params.stringify({ + before: ' ', + after: ' ' + }); + return this.stringifyBlock(builder, '@' + this.name + params + '{'); + } else { + if (this.before) { + builder(this.before); + } + semicolon = !last || this.semicolon ? ';' : ''; + return builder('@' + this.name + this._params.stringify({ + before: ' ' + }) + semicolon, this); + } + }; + + return AtRule; + + })(Container); + + _ref = ['append', 'prepend']; + _fn = function(name) { + return AtRule.prototype[name] = function(child) { + this.addMixin(child.type + 's'); + return this[name](child); + }; + }; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + name = _ref[_i]; + _fn(name); + } + + module.exports = AtRule; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/container.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/container.js new file mode 100644 index 00000000..62e4c394 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/container.js @@ -0,0 +1,243 @@ +(function() { + var Container, Declaration, Node, _ref, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Node = require('./node'); + + Declaration = require('./declaration'); + + Container = (function(_super) { + __extends(Container, _super); + + function Container() { + _ref = Container.__super__.constructor.apply(this, arguments); + return _ref; + } + + Container.prototype.stringifyContent = function(builder) { + var last, + _this = this; + if (!this.rules && !this.decls) { + return; + } + if (this.rules) { + last = this.rules.length - 1; + return this.rules.map(function(rule, i) { + return rule.stringify(builder, last === i); + }); + } else if (this.decls) { + last = this.decls.length - 1; + return this.decls.map(function(decl, i) { + return decl.stringify(builder, last !== i || _this.semicolon); + }); + } + }; + + Container.prototype.stringifyBlock = function(builder, start) { + if (this.before) { + builder(this.before); + } + builder(start, this, 'start'); + this.stringifyContent(builder); + if (this.after) { + builder(this.after); + } + return builder('}', this, 'end'); + }; + + Container.prototype.push = function(child) { + child.parent = this; + this.list.push(child); + return this; + }; + + Container.prototype.each = function(callback) { + var id, index, list; + this.lastEach || (this.lastEach = 0); + this.indexes || (this.indexes = {}); + this.lastEach += 1; + id = this.lastEach; + this.indexes[id] = 0; + list = this.list; + while (this.indexes[id] < list.length) { + index = this.indexes[id]; + callback(list[index], index); + this.indexes[id] += 1; + } + delete this.indexes[id]; + return this; + }; + + Container.prototype.eachDecl = function(callback) {}; + + Container.prototype.append = function(child) { + child = this.normalize(child, this.list[this.list.length - 1]); + this.list.push(child); + return this; + }; + + Container.prototype.prepend = function(child) { + var id, index, _ref1; + child = this.normalize(child, this.list[0], 'prepend'); + this.list.unshift(child); + _ref1 = this.indexes; + for (id in _ref1) { + index = _ref1[id]; + this.indexes[id] = index + 1; + } + return this; + }; + + Container.prototype.insertBefore = function(exist, add) { + var id, index, _ref1; + exist = this.index(exist); + add = this.normalize(add, this.list[exist], exist === 0 ? 'prepend' : void 0); + this.list.splice(exist, 0, add); + _ref1 = this.indexes; + for (id in _ref1) { + index = _ref1[id]; + if (index >= exist) { + this.indexes[id] = index + 1; + } + } + return this; + }; + + Container.prototype.insertAfter = function(exist, add) { + var id, index, _ref1; + exist = this.index(exist); + add = this.normalize(add, this.list[exist]); + this.list.splice(exist + 1, 0, add); + _ref1 = this.indexes; + for (id in _ref1) { + index = _ref1[id]; + if (index > exist) { + this.indexes[id] = index + 1; + } + } + return this; + }; + + Container.prototype.remove = function(child) { + var id, index, _ref1; + child = this.index(child); + this.list.splice(child, 1); + _ref1 = this.indexes; + for (id in _ref1) { + index = _ref1[id]; + if (index >= child) { + this.indexes[id] = index - 1; + } + } + return this; + }; + + Container.prototype.every = function(condition) { + return this.list.every(condition); + }; + + Container.prototype.some = function(condition) { + return this.list.some(condition); + }; + + Container.prototype.index = function(child) { + if (typeof child === 'number') { + return child; + } else { + return this.list.indexOf(child); + } + }; + + Container.prop('list', { + get: function() { + return this.rules || this.decls; + } + }); + + Container.prototype.normalize = function(child, sample) { + child.parent = this; + if ((child.before == null) && sample) { + child.before = sample.before; + } + return child; + }; + + return Container; + + })(Node); + + Container.WithRules = (function(_super) { + __extends(WithRules, _super); + + function WithRules() { + this.rules = []; + WithRules.__super__.constructor.apply(this, arguments); + } + + WithRules.prototype.eachDecl = function(callback) { + this.each(function(child) { + return child.eachDecl(callback); + }); + return this; + }; + + WithRules.prototype.eachRule = function(callback) { + var _this = this; + this.each(function(child, i) { + if (child.type === 'rule') { + return callback(child, i); + } else if (child.eachRule) { + return child.eachRule(callback); + } + }); + return this; + }; + + WithRules.prototype.eachAtRule = function(callback) { + var _this = this; + this.each(function(child, i) { + if (child.type === 'atrule') { + callback(child, i); + if (child.eachAtRule) { + return child.eachAtRule(callback); + } + } + }); + return this; + }; + + return WithRules; + + })(Container); + + Container.WithDecls = (function(_super) { + __extends(WithDecls, _super); + + function WithDecls() { + this.decls = []; + WithDecls.__super__.constructor.apply(this, arguments); + } + + WithDecls.prototype.normalize = function(child, sample) { + if (!child.type) { + child = new Declaration(child); + } + return WithDecls.__super__.normalize.call(this, child, sample); + }; + + WithDecls.prototype.eachDecl = function(callback) { + var _this = this; + this.each(function(decl, i) { + return callback(decl, i); + }); + return this; + }; + + return WithDecls; + + })(Container); + + module.exports = Container; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/declaration.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/declaration.js new file mode 100644 index 00000000..8d130e0b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/declaration.js @@ -0,0 +1,55 @@ +(function() { + var Declaration, Node, vendor, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Node = require('./node'); + + vendor = require('./vendor'); + + Declaration = (function(_super) { + __extends(Declaration, _super); + + function Declaration() { + this.type = 'decl'; + Declaration.__super__.constructor.apply(this, arguments); + } + + Declaration.raw('value'); + + Declaration.prototype.stringify = function(builder, semicolon) { + var string; + if (this.before) { + builder(this.before); + } + string = this.prop + (this.between || '') + ':' + this._value.stringify({ + before: ' ' + }); + if (semicolon) { + string += ';'; + } + return builder(string, this); + }; + + Declaration.prototype.removeSelf = function() { + if (!this.parent) { + return; + } + this.parent.remove(this); + return this; + }; + + Declaration.prototype.clone = function(obj) { + var cloned; + cloned = Declaration.__super__.clone.apply(this, arguments); + delete cloned.before; + return cloned; + }; + + return Declaration; + + })(Node); + + module.exports = Declaration; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/generate-map.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/generate-map.js new file mode 100644 index 00000000..8b36570e --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/generate-map.js @@ -0,0 +1,65 @@ +(function() { + var Result, SourceMap, generateMap; + + SourceMap = require('source-map'); + + Result = require('./result'); + + generateMap = function(css, opts) { + var builder, column, line, map, prev, result; + map = new SourceMap.SourceMapGenerator({ + file: opts.to || 'to.css' + }); + result = new Result(css, ''); + line = 1; + column = 1; + builder = function(str, node, type) { + var last, lines, _ref, _ref1; + result.css += str; + if ((node != null ? (_ref = node.source) != null ? _ref.start : void 0 : void 0) && type !== 'end') { + map.addMapping({ + source: node.source.file || 'from.css', + original: { + line: node.source.start.line, + column: node.source.start.column - 1 + }, + generated: { + line: line, + column: column - 1 + } + }); + } + lines = str.match(/\n/g); + if (lines) { + line += lines.length; + last = str.lastIndexOf("\n"); + column = str.length - last; + } else { + column = column + str.length; + } + if ((node != null ? (_ref1 = node.source) != null ? _ref1.end : void 0 : void 0) && type !== 'start') { + return map.addMapping({ + source: node.source.file || 'from.css', + original: { + line: node.source.end.line, + column: node.source.end.column + }, + generated: { + line: line, + column: column + } + }); + } + }; + css.stringify(builder); + if (typeof opts.map === 'string') { + prev = new SourceMap.SourceMapConsumer(opts.map); + map.applySourceMap(prev); + } + result.map = map.toString(); + return result; + }; + + module.exports = generateMap; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/list.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/list.js new file mode 100644 index 00000000..5f984c8d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/list.js @@ -0,0 +1,64 @@ +(function() { + var list; + + list = { + split: function(string, separators, last) { + var array, current, escape, func, letter, quote, separator, split, _i, _j, _len, _len1; + array = []; + current = ''; + split = false; + func = 0; + quote = false; + escape = false; + for (_i = 0, _len = string.length; _i < _len; _i++) { + letter = string[_i]; + if (quote) { + if (escape) { + escape = false; + } else if (letter === '\\') { + escape = true; + } else if (letter === quote) { + quote = false; + } + } else if (letter === '"' || letter === "'") { + quote = letter; + } else if (letter === '(') { + func += 1; + } else if (letter === ')') { + if (func > 0) { + func -= 1; + } + } else if (func === 0) { + for (_j = 0, _len1 = separators.length; _j < _len1; _j++) { + separator = separators[_j]; + if (letter === separator) { + split = true; + } + } + } + if (split) { + if (current !== '') { + array.push(current.trim()); + } + current = ''; + split = false; + } else { + current += letter; + } + } + if (last || current !== '') { + array.push(current.trim()); + } + return array; + }, + space: function(string) { + return this.split(string, [' ', "\n", "\t"]); + }, + comma: function(string) { + return this.split(string, [','], true); + } + }; + + module.exports = list; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/node.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/node.js new file mode 100644 index 00000000..6f5edfe9 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/node.js @@ -0,0 +1,126 @@ +(function() { + var Node, Raw, clone, + __hasProp = {}.hasOwnProperty; + + Raw = require('./raw'); + + clone = function(obj, parent) { + var cloned, name, value; + if (typeof obj !== 'object') { + return obj; + } + cloned = new obj.constructor(); + for (name in obj) { + if (!__hasProp.call(obj, name)) continue; + value = obj[name]; + if (name === 'parent' && typeof value === 'object') { + if (parent) { + cloned[name] = parent; + } + } else if (value instanceof Array) { + cloned[name] = value.map(function(i) { + return clone(i, cloned); + }); + } else { + cloned[name] = clone(value, cloned); + } + } + return cloned; + }; + + Node = (function() { + function Node(defaults) { + var name, value; + if (defaults == null) { + defaults = {}; + } + for (name in defaults) { + value = defaults[name]; + this[name] = value; + } + } + + Node.prop = function(name, params) { + return Object.defineProperty(this.prototype, name, params); + }; + + Node.raw = function(name) { + var hidden; + hidden = '_' + name; + this.prototype[hidden] = Raw.empty; + return this.prop(name, { + get: function() { + var _ref; + return (_ref = this[hidden]) != null ? _ref.trimmed : void 0; + }, + set: function(value) { + if (value instanceof Raw) { + return this[hidden] = value; + } else { + if (this[hidden] === Raw.empty) { + this[hidden] = new Raw(); + } + return this[hidden].set(value); + } + } + }); + }; + + Node.prototype.removeSelf = function() { + if (!this.parent) { + return; + } + this.parent.remove(this); + return this; + }; + + Node.prototype.toString = function() { + var builder, result; + result = ''; + builder = function(str) { + return result += str; + }; + this.stringify(builder); + return result; + }; + + Node.prototype.clone = function(overrides) { + var cloned, name, value; + if (overrides == null) { + overrides = {}; + } + cloned = clone(this); + for (name in overrides) { + value = overrides[name]; + cloned[name] = value; + } + return cloned; + }; + + Node.prototype.toJSON = function() { + var fixed, name, value; + fixed = {}; + for (name in this) { + if (!__hasProp.call(this, name)) continue; + value = this[name]; + if (name === 'parent') { + continue; + } + fixed[name] = value instanceof Array ? value.map(function(i) { + if (typeof i === 'object' && i.toJSON) { + return i.toJSON(); + } else { + return i; + } + }) : typeof value === 'object' && value.toJSON ? value.toJSON() : value; + } + return fixed; + }; + + return Node; + + })(); + + module.exports = Node; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/parse.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/parse.js new file mode 100644 index 00000000..abce7316 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/parse.js @@ -0,0 +1,422 @@ +(function() { + var AtRule, Declaration, Parser, Raw, Root, Rule, SyntexError; + + SyntexError = require('./syntax-error'); + + Declaration = require('./declaration'); + + AtRule = require('./at-rule'); + + Root = require('./root'); + + Rule = require('./rule'); + + Raw = require('./raw'); + + Parser = (function() { + function Parser(source, opts) { + this.opts = opts; + this.source = source.toString(); + this.root = new Root(); + this.current = this.root; + this.parents = [this.current]; + this.type = 'rules'; + this.types = [this.type]; + this.pos = -1; + this.line = 1; + this.lines = []; + this.column = 0; + this.buffer = ''; + } + + Parser.prototype.loop = function() { + while (this.pos < this.source.length - 1) { + this.move(); + this.nextLetter(); + } + return this.endFile(); + }; + + Parser.prototype.nextLetter = function() { + this.inString() || this.inComment() || this.isComment() || this.isString() || this.isWrong() || this.inAtrule() || this.isAtrule() || this.isBlockEnd() || this.inSelector() || this.isSelector() || this.inProperty() || this.isProperty() || this.inValue(); + return this.unknown(); + }; + + Parser.prototype.inString = function() { + if (this.quote) { + if (this.escape) { + this.escape = false; + } else if (this.letter === '\\') { + this.escape = true; + } else if (this.letter === this.quote) { + this.quote = void 0; + } + this.trimmed += this.letter; + return true; + } + }; + + Parser.prototype.isString = function() { + if (this.letter === '"' || this.letter === "'") { + this.quote = this.letter; + this.quotePos = { + line: this.line, + column: this.column + }; + this.trimmed += this.letter; + return true; + } + }; + + Parser.prototype.inComment = function() { + if (this.inside('comment')) { + if (this.next('*/')) { + this.popType(); + this.move(); + } + return true; + } + }; + + Parser.prototype.isComment = function() { + if (this.next('/*')) { + this.commentPos = { + line: this.line, + column: this.column + }; + this.addType('comment'); + this.move(); + return true; + } + }; + + Parser.prototype.isWrong = function() { + if (this.letter === '{' && (this.inside('decls') || this.inside('value'))) { + this.error("Unexpected {"); + } + if (this.inside('property') && (this.letter === '}' || this.letter === ';')) { + return this.error('Missing property value'); + } + }; + + Parser.prototype.isAtrule = function() { + if (this.letter === '@' && this.inside('rules')) { + this.init(new AtRule()); + this.current.name = ''; + this.addType('atrule-name'); + return true; + } + }; + + Parser.prototype.inAtrule = function(close) { + if (this.inside('atrule-name')) { + if (this.space()) { + this.checkAtruleName(); + this.buffer = this.buffer.slice(this.current.name.length); + this.trimmed = ''; + this.setType('atrule-param'); + } else if (this.letter === ';' || this.letter === '{' || close) { + this.checkAtruleName(); + this.endAtruleParams(); + } else { + this.current.name += this.letter; + } + return true; + } else if (this.inside('atrule-param')) { + if (this.letter === ';' || this.letter === '{' || close) { + this.current.params = new Raw(this.prevBuffer(), this.trim(this.trimmed)); + this.endAtruleParams(); + } else { + this.trimmed += this.letter; + } + return true; + } + }; + + Parser.prototype.inSelector = function() { + if (this.inside('selector')) { + if (this.letter === '{') { + this.current.selector = new Raw(this.prevBuffer(), this.trim(this.trimmed)); + this.semicolon = false; + this.buffer = ''; + this.setType('decls'); + } else { + this.trimmed += this.letter; + } + return true; + } + }; + + Parser.prototype.isSelector = function() { + if (!this.space() && this.inside('rules')) { + this.init(new Rule()); + if (this.letter === '{') { + this.addType('decls'); + this.current.selector = new Raw('', ''); + this.semicolon = false; + this.buffer = ''; + } else { + this.addType('selector'); + this.buffer = this.letter; + this.trimmed = this.letter; + } + return true; + } + }; + + Parser.prototype.isBlockEnd = function() { + if (this.letter === '}') { + if (this.parents.length === 1) { + this.error('Unexpected }'); + } else { + if (this.inside('value')) { + this.fixEnd(function() { + return this.inValue('close'); + }); + } else { + if (this.semicolon) { + this.current.semicolon = true; + } + this.current.after = this.prevBuffer(); + } + this.pop(); + } + return true; + } + }; + + Parser.prototype.inProperty = function() { + if (this.inside('property')) { + if (this.letter === ':') { + if (this.buffer[0] === '*' || this.buffer[0] === '_') { + this.current.before += this.buffer[0]; + this.trimmed = this.trimmed.slice(1); + this.buffer = this.buffer.slice(1); + } + this.current.prop = this.trim(this.trimmed); + this.current.between = this.prevBuffer().slice(this.current.prop.length); + this.buffer = ''; + this.setType('value'); + this.trimmed = ''; + } else if (this.letter === '{') { + this.error('Unexpected { in decls'); + } else { + this.trimmed += this.letter; + } + return true; + } + }; + + Parser.prototype.isProperty = function() { + if (this.inside('decls') && !this.space() && this.letter !== ';') { + this.init(new Declaration()); + this.addType('property'); + this.buffer = this.letter; + this.trimmed = this.letter; + this.semicolon = false; + return true; + } + }; + + Parser.prototype.inValue = function(close) { + if (this.inside('value')) { + if (this.letter === '(') { + this.inBrackets = true; + } else if (this.inBrackets && this.letter === ')') { + this.inBrackets = false; + } + if ((this.letter === ';' && !this.inBrackets) || close) { + if (this.letter === ';') { + this.semicolon = true; + } + this.current.value = new Raw(this.prevBuffer(), this.trim(this.trimmed)); + this.pop(); + } else { + this.trimmed += this.letter; + } + return true; + } + }; + + Parser.prototype.unknown = function() { + if (!this.space) { + return this.error("Unexpected symbol " + this.letter); + } + }; + + Parser.prototype.endFile = function() { + if (this.inside('atrule-param') || this.inside('atrule-name')) { + this.fixEnd(function() { + return this.inAtrule('close'); + }); + } + if (this.parents.length > 1) { + return this.error('Unclosed block', this.current.source.start); + } else if (this.inside('comment')) { + return this.error('Unclosed comment', this.commentPos); + } else if (this.quote) { + return this.error('Unclosed quote', this.quotePos); + } else { + return this.root.after = this.buffer; + } + }; + + Parser.prototype.error = function(message, position) { + if (position == null) { + position = { + line: this.line, + column: this.column + }; + } + throw new SyntexError(message, this.source, position, this.opts.from); + }; + + Parser.prototype.move = function() { + this.pos += 1; + this.column += 1; + this.letter = this.source[this.pos]; + this.buffer += this.letter; + if (this.letter === "\n") { + this.lines[this.line] = this.column - 1; + this.line += 1; + return this.column = 0; + } + }; + + Parser.prototype.prevBuffer = function() { + return this.buffer.slice(0, -1); + }; + + Parser.prototype.inside = function(type) { + return this.type === type; + }; + + Parser.prototype.next = function(string) { + return this.source.slice(this.pos, +(this.pos + string.length - 1) + 1 || 9e9) === string; + }; + + Parser.prototype.space = function() { + return this.letter === ' ' || this.letter === "\t" || this.letter === "\n" || this.letter === "\f" || this.letter === "\r"; + }; + + Parser.prototype.init = function(node) { + this.current.push(node); + this.parents.push(node); + this.current = node; + this.current.source = { + start: { + line: this.line, + column: this.column + } + }; + if (this.opts.from) { + this.current.source.file = this.opts.from; + } + this.current.before = this.buffer.slice(0, -1); + return this.buffer = ''; + }; + + Parser.prototype.fixEnd = function(callback) { + var after, all, el, last, lines, start; + if (this.letter === '}') { + start = this.buffer.search(/\s*\}$/); + after = this.buffer.slice(start, -1); + } else { + start = this.buffer.search(/\s*$/); + after = this.buffer.slice(start); + } + this.buffer = this.buffer.slice(0, +start + 1 || 9e9); + el = this.current; + callback.apply(this); + lines = after.match(/\n/g); + if (lines) { + el.source.end.line -= lines.length; + all = this.lines[el.source.end.line]; + last = after.indexOf("\n"); + if (last === -1) { + last = after.length; + } + el.source.end.column = all - last; + } else { + el.source.end.column -= after.length; + } + this.current.after = after; + return this.buffer = after; + }; + + Parser.prototype.pop = function() { + this.current.source.end = { + line: this.line, + column: this.column + }; + this.popType(); + this.parents.pop(); + this.current = this.parents[this.parents.length - 1]; + return this.buffer = ''; + }; + + Parser.prototype.addType = function(type) { + this.types.push(type); + return this.type = type; + }; + + Parser.prototype.setType = function(type) { + this.types[this.types.length - 1] = type; + return this.type = type; + }; + + Parser.prototype.popType = function() { + this.types.pop(); + return this.type = this.types[this.types.length - 1]; + }; + + Parser.prototype.atruleType = function() { + var name; + name = this.current.name.toLowerCase(); + if (name === 'page' || name === 'font-face' || name.slice(-8) === 'viewport') { + return 'decls'; + } else { + return 'rules'; + } + }; + + Parser.prototype.endAtruleParams = function() { + var type; + if (this.letter === '{') { + type = this.atruleType(); + this.current.addMixin(type); + this.setType(type); + return this.buffer = ''; + } else { + if (this.letter === ';') { + this.current.semicolon = true; + } + return this.pop(); + } + }; + + Parser.prototype.checkAtruleName = function() { + if (this.current.name === '') { + return this.error('At-rule without name'); + } + }; + + Parser.prototype.trim = function(string) { + return string.replace(/^\s*/, '').replace(/\s*$/, ''); + }; + + return Parser; + + })(); + + module.exports = function(source, opts) { + var parser; + if (opts == null) { + opts = {}; + } + parser = new Parser(source, opts); + parser.loop(); + return parser.root; + }; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/postcss.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/postcss.js new file mode 100644 index 00000000..18bac9c0 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/postcss.js @@ -0,0 +1,78 @@ +(function() { + var AtRule, Declaration, PostCSS, Result, Root, Rule, generateMap, postcss, + __slice = [].slice; + + generateMap = require('./generate-map'); + + Declaration = require('./declaration'); + + AtRule = require('./at-rule'); + + Result = require('./result'); + + Rule = require('./rule'); + + Root = require('./root'); + + PostCSS = (function() { + function PostCSS(processors) { + this.processors = processors != null ? processors : []; + } + + PostCSS.prototype.use = function(processor) { + this.processors.push(processor); + return this; + }; + + PostCSS.prototype.process = function(css, opts) { + var parsed, processor, returned, _i, _len, _ref; + if (opts == null) { + opts = {}; + } + parsed = postcss.parse(css, opts); + _ref = this.processors; + for (_i = 0, _len = _ref.length; _i < _len; _i++) { + processor = _ref[_i]; + returned = processor(parsed); + if (returned instanceof Root) { + parsed = returned; + } + } + if (opts.map) { + return generateMap(parsed, opts); + } else { + return new Result(parsed, parsed.toString()); + } + }; + + return PostCSS; + + })(); + + postcss = function() { + var processors; + processors = 1 <= arguments.length ? __slice.call(arguments, 0) : []; + return new PostCSS(processors); + }; + + postcss.parse = require('./parse'); + + postcss.decl = function(defaults) { + return new Declaration(defaults); + }; + + postcss.atRule = function(defaults) { + return new AtRule(defaults); + }; + + postcss.rule = function(defaults) { + return new Rule(defaults); + }; + + postcss.root = function(defaults) { + return new Root(defaults); + }; + + module.exports = postcss; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/raw.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/raw.js new file mode 100644 index 00000000..9217b1de --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/raw.js @@ -0,0 +1,38 @@ +(function() { + var Raw; + + Raw = (function() { + function Raw(raw, trimmed) { + this.raw = raw; + this.trimmed = trimmed; + } + + Raw.prototype.set = function(value) { + if (this.trimmed !== value) { + this.changed = true; + return this.trimmed = value; + } + }; + + Raw.prototype.stringify = function(opts) { + if (opts == null) { + opts = {}; + } + if (!this.changed) { + return this.raw || ''; + } else if (!this.raw) { + return (opts.before || '') + this.trimmed + (opts.after || ''); + } else { + return (this.raw[0] === ' ' ? ' ' : '') + this.trimmed + (this.raw.slice(-1) === ' ' ? ' ' : ''); + } + }; + + return Raw; + + })(); + + Raw.empty = new Raw(); + + module.exports = Raw; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/result.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/result.js new file mode 100644 index 00000000..810a005b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/result.js @@ -0,0 +1,20 @@ +(function() { + var Result; + + Result = (function() { + function Result(parsed, css) { + this.parsed = parsed; + this.css = css; + } + + Result.prototype.toString = function() { + return this.css; + }; + + return Result; + + })(); + + module.exports = Result; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/root.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/root.js new file mode 100644 index 00000000..68f7d0d0 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/root.js @@ -0,0 +1,38 @@ +(function() { + var Container, Root, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Container = require('./container'); + + Root = (function(_super) { + __extends(Root, _super); + + function Root() { + this.type = 'root'; + this.rules = []; + Root.__super__.constructor.apply(this, arguments); + } + + Root.prototype.normalize = function(child, sample, type) { + child = Root.__super__.normalize.apply(this, arguments); + if (type === 'prepend') { + sample.before = this.rules.length > 1 ? this.rules[1].before : this.after; + } + return child; + }; + + Root.prototype.stringify = function(builder) { + this.stringifyContent(builder); + if (this.after) { + return builder(this.after); + } + }; + + return Root; + + })(Container.WithRules); + + module.exports = Root; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/rule.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/rule.js new file mode 100644 index 00000000..ec326c24 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/rule.js @@ -0,0 +1,32 @@ +(function() { + var Container, Declaration, Rule, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + Container = require('./container'); + + Declaration = require('./declaration'); + + Rule = (function(_super) { + __extends(Rule, _super); + + function Rule() { + this.type = 'rule'; + Rule.__super__.constructor.apply(this, arguments); + } + + Rule.raw('selector'); + + Rule.prototype.stringify = function(builder) { + return this.stringifyBlock(builder, this._selector.stringify({ + after: ' ' + }) + '{'); + }; + + return Rule; + + })(Container.WithDecls); + + module.exports = Rule; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/syntax-error.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/syntax-error.js new file mode 100644 index 00000000..349dfae9 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/syntax-error.js @@ -0,0 +1,27 @@ +(function() { + var SyntaxError, + __hasProp = {}.hasOwnProperty, + __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; }; + + SyntaxError = (function(_super) { + __extends(SyntaxError, _super); + + function SyntaxError(text, source, pos, file) { + this.source = source; + this.file = file; + this.line = pos.line; + this.column = pos.column; + this.message = "Can't parse CSS: " + text; + this.message += " at line " + pos.line + ":" + pos.column; + if (this.file) { + this.message += " in " + this.file; + } + } + + return SyntaxError; + + })(Error); + + module.exports = SyntaxError; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/vendor.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/vendor.js new file mode 100644 index 00000000..a1a8223b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/lib/vendor.js @@ -0,0 +1,27 @@ +(function() { + var vendor; + + vendor = { + prefix: function(prop) { + var separator; + if (prop[0] === '-') { + separator = prop.indexOf('-', 1) + 1; + return prop.slice(0, separator); + } else { + return ''; + } + }, + unprefixed: function(prop) { + var separator; + if (prop[0] === '-') { + separator = prop.indexOf('-', 1) + 1; + return prop.slice(separator); + } else { + return prop; + } + } + }; + + module.exports = vendor; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/.npmignore b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/.npmignore new file mode 100644 index 00000000..3dddf3f6 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/.npmignore @@ -0,0 +1,2 @@ +dist/* +node_modules/* diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/.travis.yml b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/.travis.yml new file mode 100644 index 00000000..ddc9c4f9 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - 0.8 + - "0.10" \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/CHANGELOG.md b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/CHANGELOG.md new file mode 100644 index 00000000..a0e1b9c4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/CHANGELOG.md @@ -0,0 +1,130 @@ +# Change Log + +## 0.1.33 + +* Fix some edge cases surrounding path joining and URL resolution. + +* Add a third parameter for relative path to + `SourceMapGenerator.prototype.applySourceMap`. + +* Fix issues with mappings and EOLs. + +## 0.1.32 + +* Fixed a bug where SourceMapConsumer couldn't handle negative relative columns + (issue 92). + +* Fixed test runner to actually report number of failed tests as its process + exit code. + +* Fixed a typo when reporting bad mappings (issue 87). + +## 0.1.31 + +* Delay parsing the mappings in SourceMapConsumer until queried for a source + location. + +* Support Sass source maps (which at the time of writing deviate from the spec + in small ways) in SourceMapConsumer. + +## 0.1.30 + +* Do not join source root with a source, when the source is a data URI. + +* Extend the test runner to allow running single specific test files at a time. + +* Performance improvements in `SourceNode.prototype.walk` and + `SourceMapConsumer.prototype.eachMapping`. + +* Source map browser builds will now work inside Workers. + +* Better error messages when attempting to add an invalid mapping to a + `SourceMapGenerator`. + +## 0.1.29 + +* Allow duplicate entries in the `names` and `sources` arrays of source maps + (usually from TypeScript) we are parsing. Fixes github isse 72. + +## 0.1.28 + +* Skip duplicate mappings when creating source maps from SourceNode; github + issue 75. + +## 0.1.27 + +* Don't throw an error when the `file` property is missing in SourceMapConsumer, + we don't use it anyway. + +## 0.1.26 + +* Fix SourceNode.fromStringWithSourceMap for empty maps. Fixes github issue 70. + +## 0.1.25 + +* Make compatible with browserify + +## 0.1.24 + +* Fix issue with absolute paths and `file://` URIs. See + https://bugzilla.mozilla.org/show_bug.cgi?id=885597 + +## 0.1.23 + +* Fix issue with absolute paths and sourcesContent, github issue 64. + +## 0.1.22 + +* Ignore duplicate mappings in SourceMapGenerator. Fixes github issue 21. + +## 0.1.21 + +* Fixed handling of sources that start with a slash so that they are relative to + the source root's host. + +## 0.1.20 + +* Fixed github issue #43: absolute URLs aren't joined with the source root + anymore. + +## 0.1.19 + +* Using Travis CI to run tests. + +## 0.1.18 + +* Fixed a bug in the handling of sourceRoot. + +## 0.1.17 + +* Added SourceNode.fromStringWithSourceMap. + +## 0.1.16 + +* Added missing documentation. + +* Fixed the generating of empty mappings in SourceNode. + +## 0.1.15 + +* Added SourceMapGenerator.applySourceMap. + +## 0.1.14 + +* The sourceRoot is now handled consistently. + +## 0.1.13 + +* Added SourceMapGenerator.fromSourceMap. + +## 0.1.12 + +* SourceNode now generates empty mappings too. + +## 0.1.11 + +* Added name support to SourceNode. + +## 0.1.10 + +* Added sourcesContent support to the customer and generator. diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/LICENSE b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/LICENSE new file mode 100644 index 00000000..ed1b7cf2 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/LICENSE @@ -0,0 +1,28 @@ + +Copyright (c) 2009-2011, Mozilla Foundation and contributors +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + +* Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + +* Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + +* Neither the names of the Mozilla Foundation nor the names of project + contributors may be used to endorse or promote products derived from this + software without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/Makefile.dryice.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/Makefile.dryice.js new file mode 100644 index 00000000..d6fc26a7 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/Makefile.dryice.js @@ -0,0 +1,166 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +var path = require('path'); +var fs = require('fs'); +var copy = require('dryice').copy; + +function removeAmdefine(src) { + src = String(src).replace( + /if\s*\(typeof\s*define\s*!==\s*'function'\)\s*{\s*var\s*define\s*=\s*require\('amdefine'\)\(module,\s*require\);\s*}\s*/g, + ''); + src = src.replace( + /\b(define\(.*)('amdefine',?)/gm, + '$1'); + return src; +} +removeAmdefine.onRead = true; + +function makeNonRelative(src) { + return src + .replace(/require\('.\//g, 'require(\'source-map/') + .replace(/\.\.\/\.\.\/lib\//g, ''); +} +makeNonRelative.onRead = true; + +function buildBrowser() { + console.log('\nCreating dist/source-map.js'); + + var project = copy.createCommonJsProject({ + roots: [ path.join(__dirname, 'lib') ] + }); + + copy({ + source: [ + 'build/mini-require.js', + { + project: project, + require: [ 'source-map/source-map-generator', + 'source-map/source-map-consumer', + 'source-map/source-node'] + }, + 'build/suffix-browser.js' + ], + filter: [ + copy.filter.moduleDefines, + removeAmdefine + ], + dest: 'dist/source-map.js' + }); +} + +function buildBrowserMin() { + console.log('\nCreating dist/source-map.min.js'); + + copy({ + source: 'dist/source-map.js', + filter: copy.filter.uglifyjs, + dest: 'dist/source-map.min.js' + }); +} + +function buildFirefox() { + console.log('\nCreating dist/SourceMap.jsm'); + + var project = copy.createCommonJsProject({ + roots: [ path.join(__dirname, 'lib') ] + }); + + copy({ + source: [ + 'build/prefix-source-map.jsm', + { + project: project, + require: [ 'source-map/source-map-consumer', + 'source-map/source-map-generator', + 'source-map/source-node' ] + }, + 'build/suffix-source-map.jsm' + ], + filter: [ + copy.filter.moduleDefines, + removeAmdefine, + makeNonRelative + ], + dest: 'dist/SourceMap.jsm' + }); + + // Create dist/test/Utils.jsm + console.log('\nCreating dist/test/Utils.jsm'); + + project = copy.createCommonJsProject({ + roots: [ __dirname, path.join(__dirname, 'lib') ] + }); + + copy({ + source: [ + 'build/prefix-utils.jsm', + 'build/assert-shim.js', + { + project: project, + require: [ 'test/source-map/util' ] + }, + 'build/suffix-utils.jsm' + ], + filter: [ + copy.filter.moduleDefines, + removeAmdefine, + makeNonRelative + ], + dest: 'dist/test/Utils.jsm' + }); + + function isTestFile(f) { + return /^test\-.*?\.js/.test(f); + } + + var testFiles = fs.readdirSync(path.join(__dirname, 'test', 'source-map')).filter(isTestFile); + + testFiles.forEach(function (testFile) { + console.log('\nCreating', path.join('dist', 'test', testFile.replace(/\-/g, '_'))); + + copy({ + source: [ + 'build/test-prefix.js', + path.join('test', 'source-map', testFile), + 'build/test-suffix.js' + ], + filter: [ + removeAmdefine, + makeNonRelative, + function (input, source) { + return input.replace('define(', + 'define("' + + path.join('test', 'source-map', testFile.replace(/\.js$/, '')) + + '", ["require", "exports", "module"], '); + }, + function (input, source) { + return input.replace('{THIS_MODULE}', function () { + return "test/source-map/" + testFile.replace(/\.js$/, ''); + }); + } + ], + dest: path.join('dist', 'test', testFile.replace(/\-/g, '_')) + }); + }); +} + +function ensureDir(name) { + var dirExists = false; + try { + dirExists = fs.statSync(name).isDirectory(); + } catch (err) {} + + if (!dirExists) { + fs.mkdirSync(name, 0777); + } +} + +ensureDir("dist"); +ensureDir("dist/test"); +buildFirefox(); +buildBrowser(); +buildBrowserMin(); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/README.md b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/README.md new file mode 100644 index 00000000..b00e970c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/README.md @@ -0,0 +1,446 @@ +# Source Map + +This is a library to generate and consume the source map format +[described here][format]. + +This library is written in the Asynchronous Module Definition format, and works +in the following environments: + +* Modern Browsers supporting ECMAScript 5 (either after the build, or with an + AMD loader such as RequireJS) + +* Inside Firefox (as a JSM file, after the build) + +* With NodeJS versions 0.8.X and higher + +## Node + + $ npm install source-map + +## Building from Source (for everywhere else) + +Install Node and then run + + $ git clone https://fitzgen@github.com/mozilla/source-map.git + $ cd source-map + $ npm link . + +Next, run + + $ node Makefile.dryice.js + +This should spew a bunch of stuff to stdout, and create the following files: + +* `dist/source-map.js` - The unminified browser version. + +* `dist/source-map.min.js` - The minified browser version. + +* `dist/SourceMap.jsm` - The JavaScript Module for inclusion in Firefox source. + +## Examples + +### Consuming a source map + + var rawSourceMap = { + version: 3, + file: 'min.js', + names: ['bar', 'baz', 'n'], + sources: ['one.js', 'two.js'], + sourceRoot: 'http://example.com/www/js/', + mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA' + }; + + var smc = new SourceMapConsumer(rawSourceMap); + + console.log(smc.sources); + // [ 'http://example.com/www/js/one.js', + // 'http://example.com/www/js/two.js' ] + + console.log(smc.originalPositionFor({ + line: 2, + column: 28 + })); + // { source: 'http://example.com/www/js/two.js', + // line: 2, + // column: 10, + // name: 'n' } + + console.log(smc.generatedPositionFor({ + source: 'http://example.com/www/js/two.js', + line: 2, + column: 10 + })); + // { line: 2, column: 28 } + + smc.eachMapping(function (m) { + // ... + }); + +### Generating a source map + +In depth guide: +[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/) + +#### With SourceNode (high level API) + + function compile(ast) { + switch (ast.type) { + case 'BinaryExpression': + return new SourceNode( + ast.location.line, + ast.location.column, + ast.location.source, + [compile(ast.left), " + ", compile(ast.right)] + ); + case 'Literal': + return new SourceNode( + ast.location.line, + ast.location.column, + ast.location.source, + String(ast.value) + ); + // ... + default: + throw new Error("Bad AST"); + } + } + + var ast = parse("40 + 2", "add.js"); + console.log(compile(ast).toStringWithSourceMap({ + file: 'add.js' + })); + // { code: '40 + 2', + // map: [object SourceMapGenerator] } + +#### With SourceMapGenerator (low level API) + + var map = new SourceMapGenerator({ + file: "source-mapped.js" + }); + + map.addMapping({ + generated: { + line: 10, + column: 35 + }, + source: "foo.js", + original: { + line: 33, + column: 2 + }, + name: "christopher" + }); + + console.log(map.toString()); + // '{"version":3,"file":"source-mapped.js","sources":["foo.js"],"names":["christopher"],"mappings":";;;;;;;;;mCAgCEA"}' + +## API + +Get a reference to the module: + + // NodeJS + var sourceMap = require('source-map'); + + // Browser builds + var sourceMap = window.sourceMap; + + // Inside Firefox + let sourceMap = {}; + Components.utils.import('resource:///modules/devtools/SourceMap.jsm', sourceMap); + +### SourceMapConsumer + +A SourceMapConsumer instance represents a parsed source map which we can query +for information about the original file positions by giving it a file position +in the generated source. + +#### new SourceMapConsumer(rawSourceMap) + +The only parameter is the raw source map (either as a string which can be +`JSON.parse`'d, or an object). According to the spec, source maps have the +following attributes: + +* `version`: Which version of the source map spec this map is following. + +* `sources`: An array of URLs to the original source files. + +* `names`: An array of identifiers which can be referrenced by individual + mappings. + +* `sourceRoot`: Optional. The URL root from which all sources are relative. + +* `sourcesContent`: Optional. An array of contents of the original source files. + +* `mappings`: A string of base64 VLQs which contain the actual mappings. + +* `file`: Optional. The generated filename this source map is associated with. + +#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition) + +Returns the original source, line, and column information for the generated +source's line and column positions provided. The only argument is an object with +the following properties: + +* `line`: The line number in the generated source. + +* `column`: The column number in the generated source. + +and an object is returned with the following properties: + +* `source`: The original source file, or null if this information is not + available. + +* `line`: The line number in the original source, or null if this information is + not available. + +* `column`: The column number in the original source, or null or null if this + information is not available. + +* `name`: The original identifier, or null if this information is not available. + +#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition) + +Returns the generated line and column information for the original source, +line, and column positions provided. The only argument is an object with +the following properties: + +* `source`: The filename of the original source. + +* `line`: The line number in the original source. + +* `column`: The column number in the original source. + +and an object is returned with the following properties: + +* `line`: The line number in the generated source, or null. + +* `column`: The column number in the generated source, or null. + +#### SourceMapConsumer.prototype.sourceContentFor(source) + +Returns the original source content for the source provided. The only +argument is the URL of the original source file. + +#### SourceMapConsumer.prototype.eachMapping(callback, context, order) + +Iterate over each mapping between an original source/line/column and a +generated line/column in this source map. + +* `callback`: The function that is called with each mapping. Mappings have the + form `{ source, generatedLine, generatedColumn, originalLine, originalColumn, + name }` + +* `context`: Optional. If specified, this object will be the value of `this` + every time that `callback` is called. + +* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or + `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over + the mappings sorted by the generated file's line/column order or the + original's source/line/column order, respectively. Defaults to + `SourceMapConsumer.GENERATED_ORDER`. + +### SourceMapGenerator + +An instance of the SourceMapGenerator represents a source map which is being +built incrementally. + +#### new SourceMapGenerator([startOfSourceMap]) + +You may pass an object with the following properties: + +* `file`: The filename of the generated source that this source map is + associated with. + +* `sourceRoot`: A root for all relative URLs in this source map. + +#### SourceMapGenerator.fromSourceMap(sourceMapConsumer) + +Creates a new SourceMapGenerator based on a SourceMapConsumer + +* `sourceMapConsumer` The SourceMap. + +#### SourceMapGenerator.prototype.addMapping(mapping) + +Add a single mapping from original source line and column to the generated +source's line and column for this source map being created. The mapping object +should have the following properties: + +* `generated`: An object with the generated line and column positions. + +* `original`: An object with the original line and column positions. + +* `source`: The original source file (relative to the sourceRoot). + +* `name`: An optional original token name for this mapping. + +#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent) + +Set the source content for an original source file. + +* `sourceFile` the URL of the original source file. + +* `sourceContent` the content of the source file. + +#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]]) + +Applies a SourceMap for a source file to the SourceMap. +Each mapping to the supplied source file is rewritten using the +supplied SourceMap. Note: The resolution for the resulting mappings +is the minimium of this map and the supplied map. + +* `sourceMapConsumer`: The SourceMap to be applied. + +* `sourceFile`: Optional. The filename of the source file. + If omitted, sourceMapConsumer.file will be used, if it exists. + Otherwise an error will be thrown. + +* `sourceMapPath`: Optional. The dirname of the path to the SourceMap + to be applied. If relative, it is relative to the SourceMap. + + This parameter is needed when the two SourceMaps aren't in the same + directory, and the SourceMap to be applied contains relative source + paths. If so, those relative source paths need to be rewritten + relative to the SourceMap. + + If omitted, it is assumed that both SourceMaps are in the same directory, + thus not needing any rewriting. (Supplying `'.'` has the same effect.) + +#### SourceMapGenerator.prototype.toString() + +Renders the source map being generated to a string. + +### SourceNode + +SourceNodes provide a way to abstract over interpolating and/or concatenating +snippets of generated JavaScript source code, while maintaining the line and +column information associated between those snippets and the original source +code. This is useful as the final intermediate representation a compiler might +use before outputting the generated JS and source map. + +#### new SourceNode([line, column, source[, chunk[, name]]]) + +* `line`: The original line number associated with this source node, or null if + it isn't associated with an original line. + +* `column`: The original column number associated with this source node, or null + if it isn't associated with an original column. + +* `source`: The original source's filename; null if no filename is provided. + +* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see + below. + +* `name`: Optional. The original identifier. + +#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer) + +Creates a SourceNode from generated code and a SourceMapConsumer. + +* `code`: The generated code + +* `sourceMapConsumer` The SourceMap for the generated code + +#### SourceNode.prototype.add(chunk) + +Add a chunk of generated JS to this source node. + +* `chunk`: A string snippet of generated JS code, another instance of + `SourceNode`, or an array where each member is one of those things. + +#### SourceNode.prototype.prepend(chunk) + +Prepend a chunk of generated JS to this source node. + +* `chunk`: A string snippet of generated JS code, another instance of + `SourceNode`, or an array where each member is one of those things. + +#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent) + +Set the source content for a source file. This will be added to the +`SourceMap` in the `sourcesContent` field. + +* `sourceFile`: The filename of the source file + +* `sourceContent`: The content of the source file + +#### SourceNode.prototype.walk(fn) + +Walk over the tree of JS snippets in this node and its children. The walking +function is called once for each snippet of JS and is passed that snippet and +the its original associated source's line/column location. + +* `fn`: The traversal function. + +#### SourceNode.prototype.walkSourceContents(fn) + +Walk over the tree of SourceNodes. The walking function is called for each +source file content and is passed the filename and source content. + +* `fn`: The traversal function. + +#### SourceNode.prototype.join(sep) + +Like `Array.prototype.join` except for SourceNodes. Inserts the separator +between each of this source node's children. + +* `sep`: The separator. + +#### SourceNode.prototype.replaceRight(pattern, replacement) + +Call `String.prototype.replace` on the very right-most source snippet. Useful +for trimming whitespace from the end of a source node, etc. + +* `pattern`: The pattern to replace. + +* `replacement`: The thing to replace the pattern with. + +#### SourceNode.prototype.toString() + +Return the string representation of this source node. Walks over the tree and +concatenates all the various snippets together to one string. + +### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap]) + +Returns the string representation of this tree of source nodes, plus a +SourceMapGenerator which contains all the mappings between the generated and +original sources. + +The arguments are the same as those to `new SourceMapGenerator`. + +## Tests + +[![Build Status](https://travis-ci.org/mozilla/source-map.png?branch=master)](https://travis-ci.org/mozilla/source-map) + +Install NodeJS version 0.8.0 or greater, then run `node test/run-tests.js`. + +To add new tests, create a new file named `test/test-<your new test name>.js` +and export your test functions with names that start with "test", for example + + exports["test doing the foo bar"] = function (assert, util) { + ... + }; + +The new test will be located automatically when you run the suite. + +The `util` argument is the test utility module located at `test/source-map/util`. + +The `assert` argument is a cut down version of node's assert module. You have +access to the following assertion functions: + +* `doesNotThrow` + +* `equal` + +* `ok` + +* `strictEqual` + +* `throws` + +(The reason for the restricted set of test functions is because we need the +tests to run inside Firefox's test suite as well and so the assert module is +shimmed in that environment. See `build/assert-shim.js`.) + +[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit +[feature]: https://wiki.mozilla.org/DevTools/Features/SourceMap +[Dryice]: https://github.com/mozilla/dryice diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/assert-shim.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/assert-shim.js new file mode 100644 index 00000000..daa1a623 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/assert-shim.js @@ -0,0 +1,56 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +define('test/source-map/assert', ['exports'], function (exports) { + + let do_throw = function (msg) { + throw new Error(msg); + }; + + exports.init = function (throw_fn) { + do_throw = throw_fn; + }; + + exports.doesNotThrow = function (fn) { + try { + fn(); + } + catch (e) { + do_throw(e.message); + } + }; + + exports.equal = function (actual, expected, msg) { + msg = msg || String(actual) + ' != ' + String(expected); + if (actual != expected) { + do_throw(msg); + } + }; + + exports.ok = function (val, msg) { + msg = msg || String(val) + ' is falsey'; + if (!Boolean(val)) { + do_throw(msg); + } + }; + + exports.strictEqual = function (actual, expected, msg) { + msg = msg || String(actual) + ' !== ' + String(expected); + if (actual !== expected) { + do_throw(msg); + } + }; + + exports.throws = function (fn) { + try { + fn(); + do_throw('Expected an error to be thrown, but it wasn\'t.'); + } + catch (e) { + } + }; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/mini-require.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/mini-require.js new file mode 100644 index 00000000..0daf4537 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/mini-require.js @@ -0,0 +1,152 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +/** + * Define a module along with a payload. + * @param {string} moduleName Name for the payload + * @param {ignored} deps Ignored. For compatibility with CommonJS AMD Spec + * @param {function} payload Function with (require, exports, module) params + */ +function define(moduleName, deps, payload) { + if (typeof moduleName != "string") { + throw new TypeError('Expected string, got: ' + moduleName); + } + + if (arguments.length == 2) { + payload = deps; + } + + if (moduleName in define.modules) { + throw new Error("Module already defined: " + moduleName); + } + define.modules[moduleName] = payload; +}; + +/** + * The global store of un-instantiated modules + */ +define.modules = {}; + + +/** + * We invoke require() in the context of a Domain so we can have multiple + * sets of modules running separate from each other. + * This contrasts with JSMs which are singletons, Domains allows us to + * optionally load a CommonJS module twice with separate data each time. + * Perhaps you want 2 command lines with a different set of commands in each, + * for example. + */ +function Domain() { + this.modules = {}; + this._currentModule = null; +} + +(function () { + + /** + * Lookup module names and resolve them by calling the definition function if + * needed. + * There are 2 ways to call this, either with an array of dependencies and a + * callback to call when the dependencies are found (which can happen + * asynchronously in an in-page context) or with a single string an no callback + * where the dependency is resolved synchronously and returned. + * The API is designed to be compatible with the CommonJS AMD spec and + * RequireJS. + * @param {string[]|string} deps A name, or names for the payload + * @param {function|undefined} callback Function to call when the dependencies + * are resolved + * @return {undefined|object} The module required or undefined for + * array/callback method + */ + Domain.prototype.require = function(deps, callback) { + if (Array.isArray(deps)) { + var params = deps.map(function(dep) { + return this.lookup(dep); + }, this); + if (callback) { + callback.apply(null, params); + } + return undefined; + } + else { + return this.lookup(deps); + } + }; + + function normalize(path) { + var bits = path.split('/'); + var i = 1; + while (i < bits.length) { + if (bits[i] === '..') { + bits.splice(i-1, 1); + } else if (bits[i] === '.') { + bits.splice(i, 1); + } else { + i++; + } + } + return bits.join('/'); + } + + function join(a, b) { + a = a.trim(); + b = b.trim(); + if (/^\//.test(b)) { + return b; + } else { + return a.replace(/\/*$/, '/') + b; + } + } + + function dirname(path) { + var bits = path.split('/'); + bits.pop(); + return bits.join('/'); + } + + /** + * Lookup module names and resolve them by calling the definition function if + * needed. + * @param {string} moduleName A name for the payload to lookup + * @return {object} The module specified by aModuleName or null if not found. + */ + Domain.prototype.lookup = function(moduleName) { + if (/^\./.test(moduleName)) { + moduleName = normalize(join(dirname(this._currentModule), moduleName)); + } + + if (moduleName in this.modules) { + var module = this.modules[moduleName]; + return module; + } + + if (!(moduleName in define.modules)) { + throw new Error("Module not defined: " + moduleName); + } + + var module = define.modules[moduleName]; + + if (typeof module == "function") { + var exports = {}; + var previousModule = this._currentModule; + this._currentModule = moduleName; + module(this.require.bind(this), exports, { id: moduleName, uri: "" }); + this._currentModule = previousModule; + module = exports; + } + + // cache the resulting module object for next time + this.modules[moduleName] = module; + + return module; + }; + +}()); + +define.Domain = Domain; +define.globalDomain = new Domain(); +var require = define.globalDomain.require.bind(define.globalDomain); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/prefix-source-map.jsm b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/prefix-source-map.jsm new file mode 100644 index 00000000..ee2539d8 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/prefix-source-map.jsm @@ -0,0 +1,20 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +/* + * WARNING! + * + * Do not edit this file directly, it is built from the sources at + * https://github.com/mozilla/source-map/ + */ + +/////////////////////////////////////////////////////////////////////////////// + + +this.EXPORTED_SYMBOLS = [ "SourceMapConsumer", "SourceMapGenerator", "SourceNode" ]; + +Components.utils.import('resource://gre/modules/devtools/Require.jsm'); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/prefix-utils.jsm b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/prefix-utils.jsm new file mode 100644 index 00000000..80341d45 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/prefix-utils.jsm @@ -0,0 +1,18 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ + +/* + * WARNING! + * + * Do not edit this file directly, it is built from the sources at + * https://github.com/mozilla/source-map/ + */ + +Components.utils.import('resource://gre/modules/devtools/Require.jsm'); +Components.utils.import('resource://gre/modules/devtools/SourceMap.jsm'); + +this.EXPORTED_SYMBOLS = [ "define", "runSourceMapTests" ]; diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-browser.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-browser.js new file mode 100644 index 00000000..fb29ff5f --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-browser.js @@ -0,0 +1,8 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/////////////////////////////////////////////////////////////////////////////// + +this.sourceMap = { + SourceMapConsumer: require('source-map/source-map-consumer').SourceMapConsumer, + SourceMapGenerator: require('source-map/source-map-generator').SourceMapGenerator, + SourceNode: require('source-map/source-node').SourceNode +}; diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-source-map.jsm b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-source-map.jsm new file mode 100644 index 00000000..cf3c2d8d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-source-map.jsm @@ -0,0 +1,6 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/////////////////////////////////////////////////////////////////////////////// + +this.SourceMapConsumer = require('source-map/source-map-consumer').SourceMapConsumer; +this.SourceMapGenerator = require('source-map/source-map-generator').SourceMapGenerator; +this.SourceNode = require('source-map/source-node').SourceNode; diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-utils.jsm b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-utils.jsm new file mode 100644 index 00000000..b31b84cb --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/suffix-utils.jsm @@ -0,0 +1,21 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +function runSourceMapTests(modName, do_throw) { + let mod = require(modName); + let assert = require('test/source-map/assert'); + let util = require('test/source-map/util'); + + assert.init(do_throw); + + for (let k in mod) { + if (/^test/.test(k)) { + mod[k](assert, util); + } + } + +} +this.runSourceMapTests = runSourceMapTests; diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/test-prefix.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/test-prefix.js new file mode 100644 index 00000000..1b13f300 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/test-prefix.js @@ -0,0 +1,8 @@ +/* + * WARNING! + * + * Do not edit this file directly, it is built from the sources at + * https://github.com/mozilla/source-map/ + */ + +Components.utils.import('resource://test/Utils.jsm'); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/test-suffix.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/test-suffix.js new file mode 100644 index 00000000..bec2de3f --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/build/test-suffix.js @@ -0,0 +1,3 @@ +function run_test() { + runSourceMapTests('{THIS_MODULE}', do_throw); +} diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map.js new file mode 100644 index 00000000..121ad241 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map.js @@ -0,0 +1,8 @@ +/* + * Copyright 2009-2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE.txt or: + * http://opensource.org/licenses/BSD-3-Clause + */ +exports.SourceMapGenerator = require('./source-map/source-map-generator').SourceMapGenerator; +exports.SourceMapConsumer = require('./source-map/source-map-consumer').SourceMapConsumer; +exports.SourceNode = require('./source-map/source-node').SourceNode; diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/array-set.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/array-set.js new file mode 100644 index 00000000..40f9a18b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/array-set.js @@ -0,0 +1,97 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var util = require('./util'); + + /** + * A data structure which is a combination of an array and a set. Adding a new + * member is O(1), testing for membership is O(1), and finding the index of an + * element is O(1). Removing elements from the set is not supported. Only + * strings are supported for membership. + */ + function ArraySet() { + this._array = []; + this._set = {}; + } + + /** + * Static method for creating ArraySet instances from an existing array. + */ + ArraySet.fromArray = function ArraySet_fromArray(aArray, aAllowDuplicates) { + var set = new ArraySet(); + for (var i = 0, len = aArray.length; i < len; i++) { + set.add(aArray[i], aAllowDuplicates); + } + return set; + }; + + /** + * Add the given string to this set. + * + * @param String aStr + */ + ArraySet.prototype.add = function ArraySet_add(aStr, aAllowDuplicates) { + var isDuplicate = this.has(aStr); + var idx = this._array.length; + if (!isDuplicate || aAllowDuplicates) { + this._array.push(aStr); + } + if (!isDuplicate) { + this._set[util.toSetString(aStr)] = idx; + } + }; + + /** + * Is the given string a member of this set? + * + * @param String aStr + */ + ArraySet.prototype.has = function ArraySet_has(aStr) { + return Object.prototype.hasOwnProperty.call(this._set, + util.toSetString(aStr)); + }; + + /** + * What is the index of the given string in the array? + * + * @param String aStr + */ + ArraySet.prototype.indexOf = function ArraySet_indexOf(aStr) { + if (this.has(aStr)) { + return this._set[util.toSetString(aStr)]; + } + throw new Error('"' + aStr + '" is not in the set.'); + }; + + /** + * What is the element at the given index? + * + * @param Number aIdx + */ + ArraySet.prototype.at = function ArraySet_at(aIdx) { + if (aIdx >= 0 && aIdx < this._array.length) { + return this._array[aIdx]; + } + throw new Error('No element indexed by ' + aIdx); + }; + + /** + * Returns the array representation of this set (which has the proper indices + * indicated by indexOf). Note that this is a copy of the internal array used + * for storing the members so that no one can mess with internal state. + */ + ArraySet.prototype.toArray = function ArraySet_toArray() { + return this._array.slice(); + }; + + exports.ArraySet = ArraySet; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/base64-vlq.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/base64-vlq.js new file mode 100644 index 00000000..1b67bb37 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/base64-vlq.js @@ -0,0 +1,144 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + * + * Based on the Base 64 VLQ implementation in Closure Compiler: + * https://code.google.com/p/closure-compiler/source/browse/trunk/src/com/google/debugging/sourcemap/Base64VLQ.java + * + * Copyright 2011 The Closure Compiler Authors. All rights reserved. + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are + * met: + * + * * Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above + * copyright notice, this list of conditions and the following + * disclaimer in the documentation and/or other materials provided + * with the distribution. + * * Neither the name of Google Inc. nor the names of its + * contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT + * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, + * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var base64 = require('./base64'); + + // A single base 64 digit can contain 6 bits of data. For the base 64 variable + // length quantities we use in the source map spec, the first bit is the sign, + // the next four bits are the actual value, and the 6th bit is the + // continuation bit. The continuation bit tells us whether there are more + // digits in this value following this digit. + // + // Continuation + // | Sign + // | | + // V V + // 101011 + + var VLQ_BASE_SHIFT = 5; + + // binary: 100000 + var VLQ_BASE = 1 << VLQ_BASE_SHIFT; + + // binary: 011111 + var VLQ_BASE_MASK = VLQ_BASE - 1; + + // binary: 100000 + var VLQ_CONTINUATION_BIT = VLQ_BASE; + + /** + * Converts from a two-complement value to a value where the sign bit is + * is placed in the least significant bit. For example, as decimals: + * 1 becomes 2 (10 binary), -1 becomes 3 (11 binary) + * 2 becomes 4 (100 binary), -2 becomes 5 (101 binary) + */ + function toVLQSigned(aValue) { + return aValue < 0 + ? ((-aValue) << 1) + 1 + : (aValue << 1) + 0; + } + + /** + * Converts to a two-complement value from a value where the sign bit is + * is placed in the least significant bit. For example, as decimals: + * 2 (10 binary) becomes 1, 3 (11 binary) becomes -1 + * 4 (100 binary) becomes 2, 5 (101 binary) becomes -2 + */ + function fromVLQSigned(aValue) { + var isNegative = (aValue & 1) === 1; + var shifted = aValue >> 1; + return isNegative + ? -shifted + : shifted; + } + + /** + * Returns the base 64 VLQ encoded value. + */ + exports.encode = function base64VLQ_encode(aValue) { + var encoded = ""; + var digit; + + var vlq = toVLQSigned(aValue); + + do { + digit = vlq & VLQ_BASE_MASK; + vlq >>>= VLQ_BASE_SHIFT; + if (vlq > 0) { + // There are still more digits in this value, so we must make sure the + // continuation bit is marked. + digit |= VLQ_CONTINUATION_BIT; + } + encoded += base64.encode(digit); + } while (vlq > 0); + + return encoded; + }; + + /** + * Decodes the next base 64 VLQ value from the given string and returns the + * value and the rest of the string. + */ + exports.decode = function base64VLQ_decode(aStr) { + var i = 0; + var strLen = aStr.length; + var result = 0; + var shift = 0; + var continuation, digit; + + do { + if (i >= strLen) { + throw new Error("Expected more digits in base 64 VLQ value."); + } + digit = base64.decode(aStr.charAt(i++)); + continuation = !!(digit & VLQ_CONTINUATION_BIT); + digit &= VLQ_BASE_MASK; + result = result + (digit << shift); + shift += VLQ_BASE_SHIFT; + } while (continuation); + + return { + value: fromVLQSigned(result), + rest: aStr.slice(i) + }; + }; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/base64.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/base64.js new file mode 100644 index 00000000..863cc465 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/base64.js @@ -0,0 +1,42 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var charToIntMap = {}; + var intToCharMap = {}; + + 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + .split('') + .forEach(function (ch, index) { + charToIntMap[ch] = index; + intToCharMap[index] = ch; + }); + + /** + * Encode an integer in the range of 0 to 63 to a single base 64 digit. + */ + exports.encode = function base64_encode(aNumber) { + if (aNumber in intToCharMap) { + return intToCharMap[aNumber]; + } + throw new TypeError("Must be between 0 and 63: " + aNumber); + }; + + /** + * Decode a single base 64 digit to an integer. + */ + exports.decode = function base64_decode(aChar) { + if (aChar in charToIntMap) { + return charToIntMap[aChar]; + } + throw new TypeError("Not a valid base 64 digit: " + aChar); + }; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/binary-search.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/binary-search.js new file mode 100644 index 00000000..ff347c68 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/binary-search.js @@ -0,0 +1,81 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + /** + * Recursive implementation of binary search. + * + * @param aLow Indices here and lower do not contain the needle. + * @param aHigh Indices here and higher do not contain the needle. + * @param aNeedle The element being searched for. + * @param aHaystack The non-empty array being searched. + * @param aCompare Function which takes two elements and returns -1, 0, or 1. + */ + function recursiveSearch(aLow, aHigh, aNeedle, aHaystack, aCompare) { + // This function terminates when one of the following is true: + // + // 1. We find the exact element we are looking for. + // + // 2. We did not find the exact element, but we can return the next + // closest element that is less than that element. + // + // 3. We did not find the exact element, and there is no next-closest + // element which is less than the one we are searching for, so we + // return null. + var mid = Math.floor((aHigh - aLow) / 2) + aLow; + var cmp = aCompare(aNeedle, aHaystack[mid], true); + if (cmp === 0) { + // Found the element we are looking for. + return aHaystack[mid]; + } + else if (cmp > 0) { + // aHaystack[mid] is greater than our needle. + if (aHigh - mid > 1) { + // The element is in the upper half. + return recursiveSearch(mid, aHigh, aNeedle, aHaystack, aCompare); + } + // We did not find an exact match, return the next closest one + // (termination case 2). + return aHaystack[mid]; + } + else { + // aHaystack[mid] is less than our needle. + if (mid - aLow > 1) { + // The element is in the lower half. + return recursiveSearch(aLow, mid, aNeedle, aHaystack, aCompare); + } + // The exact needle element was not found in this haystack. Determine if + // we are in termination case (2) or (3) and return the appropriate thing. + return aLow < 0 + ? null + : aHaystack[aLow]; + } + } + + /** + * This is an implementation of binary search which will always try and return + * the next lowest value checked if there is no exact hit. This is because + * mappings between original and generated line/col pairs are single points, + * and there is an implicit region between each of them, so a miss just means + * that you aren't on the very start of a region. + * + * @param aNeedle The element you are looking for. + * @param aHaystack The array that is being searched. + * @param aCompare A function which takes the needle and an element in the + * array and returns -1, 0, or 1 depending on whether the needle is less + * than, equal to, or greater than the element, respectively. + */ + exports.search = function search(aNeedle, aHaystack, aCompare) { + return aHaystack.length > 0 + ? recursiveSearch(-1, aHaystack.length, aNeedle, aHaystack, aCompare) + : null; + }; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-consumer.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-consumer.js new file mode 100644 index 00000000..5214d5e7 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-consumer.js @@ -0,0 +1,478 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var util = require('./util'); + var binarySearch = require('./binary-search'); + var ArraySet = require('./array-set').ArraySet; + var base64VLQ = require('./base64-vlq'); + + /** + * A SourceMapConsumer instance represents a parsed source map which we can + * query for information about the original file positions by giving it a file + * position in the generated source. + * + * The only parameter is the raw source map (either as a JSON string, or + * already parsed to an object). According to the spec, source maps have the + * following attributes: + * + * - version: Which version of the source map spec this map is following. + * - sources: An array of URLs to the original source files. + * - names: An array of identifiers which can be referrenced by individual mappings. + * - sourceRoot: Optional. The URL root from which all sources are relative. + * - sourcesContent: Optional. An array of contents of the original source files. + * - mappings: A string of base64 VLQs which contain the actual mappings. + * - file: Optional. The generated file this source map is associated with. + * + * Here is an example source map, taken from the source map spec[0]: + * + * { + * version : 3, + * file: "out.js", + * sourceRoot : "", + * sources: ["foo.js", "bar.js"], + * names: ["src", "maps", "are", "fun"], + * mappings: "AA,AB;;ABCDE;" + * } + * + * [0]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit?pli=1# + */ + function SourceMapConsumer(aSourceMap) { + var sourceMap = aSourceMap; + if (typeof aSourceMap === 'string') { + sourceMap = JSON.parse(aSourceMap.replace(/^\)\]\}'/, '')); + } + + var version = util.getArg(sourceMap, 'version'); + var sources = util.getArg(sourceMap, 'sources'); + // Sass 3.3 leaves out the 'names' array, so we deviate from the spec (which + // requires the array) to play nice here. + var names = util.getArg(sourceMap, 'names', []); + var sourceRoot = util.getArg(sourceMap, 'sourceRoot', null); + var sourcesContent = util.getArg(sourceMap, 'sourcesContent', null); + var mappings = util.getArg(sourceMap, 'mappings'); + var file = util.getArg(sourceMap, 'file', null); + + // Once again, Sass deviates from the spec and supplies the version as a + // string rather than a number, so we use loose equality checking here. + if (version != this._version) { + throw new Error('Unsupported version: ' + version); + } + + // Pass `true` below to allow duplicate names and sources. While source maps + // are intended to be compressed and deduplicated, the TypeScript compiler + // sometimes generates source maps with duplicates in them. See Github issue + // #72 and bugzil.la/889492. + this._names = ArraySet.fromArray(names, true); + this._sources = ArraySet.fromArray(sources, true); + + this.sourceRoot = sourceRoot; + this.sourcesContent = sourcesContent; + this._mappings = mappings; + this.file = file; + } + + /** + * Create a SourceMapConsumer from a SourceMapGenerator. + * + * @param SourceMapGenerator aSourceMap + * The source map that will be consumed. + * @returns SourceMapConsumer + */ + SourceMapConsumer.fromSourceMap = + function SourceMapConsumer_fromSourceMap(aSourceMap) { + var smc = Object.create(SourceMapConsumer.prototype); + + smc._names = ArraySet.fromArray(aSourceMap._names.toArray(), true); + smc._sources = ArraySet.fromArray(aSourceMap._sources.toArray(), true); + smc.sourceRoot = aSourceMap._sourceRoot; + smc.sourcesContent = aSourceMap._generateSourcesContent(smc._sources.toArray(), + smc.sourceRoot); + smc.file = aSourceMap._file; + + smc.__generatedMappings = aSourceMap._mappings.slice() + .sort(util.compareByGeneratedPositions); + smc.__originalMappings = aSourceMap._mappings.slice() + .sort(util.compareByOriginalPositions); + + return smc; + }; + + /** + * The version of the source mapping spec that we are consuming. + */ + SourceMapConsumer.prototype._version = 3; + + /** + * The list of original sources. + */ + Object.defineProperty(SourceMapConsumer.prototype, 'sources', { + get: function () { + return this._sources.toArray().map(function (s) { + return this.sourceRoot ? util.join(this.sourceRoot, s) : s; + }, this); + } + }); + + // `__generatedMappings` and `__originalMappings` are arrays that hold the + // parsed mapping coordinates from the source map's "mappings" attribute. They + // are lazily instantiated, accessed via the `_generatedMappings` and + // `_originalMappings` getters respectively, and we only parse the mappings + // and create these arrays once queried for a source location. We jump through + // these hoops because there can be many thousands of mappings, and parsing + // them is expensive, so we only want to do it if we must. + // + // Each object in the arrays is of the form: + // + // { + // generatedLine: The line number in the generated code, + // generatedColumn: The column number in the generated code, + // source: The path to the original source file that generated this + // chunk of code, + // originalLine: The line number in the original source that + // corresponds to this chunk of generated code, + // originalColumn: The column number in the original source that + // corresponds to this chunk of generated code, + // name: The name of the original symbol which generated this chunk of + // code. + // } + // + // All properties except for `generatedLine` and `generatedColumn` can be + // `null`. + // + // `_generatedMappings` is ordered by the generated positions. + // + // `_originalMappings` is ordered by the original positions. + + SourceMapConsumer.prototype.__generatedMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_generatedMappings', { + get: function () { + if (!this.__generatedMappings) { + this.__generatedMappings = []; + this.__originalMappings = []; + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__generatedMappings; + } + }); + + SourceMapConsumer.prototype.__originalMappings = null; + Object.defineProperty(SourceMapConsumer.prototype, '_originalMappings', { + get: function () { + if (!this.__originalMappings) { + this.__generatedMappings = []; + this.__originalMappings = []; + this._parseMappings(this._mappings, this.sourceRoot); + } + + return this.__originalMappings; + } + }); + + /** + * Parse the mappings in a string in to a data structure which we can easily + * query (the ordered arrays in the `this.__generatedMappings` and + * `this.__originalMappings` properties). + */ + SourceMapConsumer.prototype._parseMappings = + function SourceMapConsumer_parseMappings(aStr, aSourceRoot) { + var generatedLine = 1; + var previousGeneratedColumn = 0; + var previousOriginalLine = 0; + var previousOriginalColumn = 0; + var previousSource = 0; + var previousName = 0; + var mappingSeparator = /^[,;]/; + var str = aStr; + var mapping; + var temp; + + while (str.length > 0) { + if (str.charAt(0) === ';') { + generatedLine++; + str = str.slice(1); + previousGeneratedColumn = 0; + } + else if (str.charAt(0) === ',') { + str = str.slice(1); + } + else { + mapping = {}; + mapping.generatedLine = generatedLine; + + // Generated column. + temp = base64VLQ.decode(str); + mapping.generatedColumn = previousGeneratedColumn + temp.value; + previousGeneratedColumn = mapping.generatedColumn; + str = temp.rest; + + if (str.length > 0 && !mappingSeparator.test(str.charAt(0))) { + // Original source. + temp = base64VLQ.decode(str); + mapping.source = this._sources.at(previousSource + temp.value); + previousSource += temp.value; + str = temp.rest; + if (str.length === 0 || mappingSeparator.test(str.charAt(0))) { + throw new Error('Found a source, but no line and column'); + } + + // Original line. + temp = base64VLQ.decode(str); + mapping.originalLine = previousOriginalLine + temp.value; + previousOriginalLine = mapping.originalLine; + // Lines are stored 0-based + mapping.originalLine += 1; + str = temp.rest; + if (str.length === 0 || mappingSeparator.test(str.charAt(0))) { + throw new Error('Found a source and line, but no column'); + } + + // Original column. + temp = base64VLQ.decode(str); + mapping.originalColumn = previousOriginalColumn + temp.value; + previousOriginalColumn = mapping.originalColumn; + str = temp.rest; + + if (str.length > 0 && !mappingSeparator.test(str.charAt(0))) { + // Original name. + temp = base64VLQ.decode(str); + mapping.name = this._names.at(previousName + temp.value); + previousName += temp.value; + str = temp.rest; + } + } + + this.__generatedMappings.push(mapping); + if (typeof mapping.originalLine === 'number') { + this.__originalMappings.push(mapping); + } + } + } + + this.__generatedMappings.sort(util.compareByGeneratedPositions); + this.__originalMappings.sort(util.compareByOriginalPositions); + }; + + /** + * Find the mapping that best matches the hypothetical "needle" mapping that + * we are searching for in the given "haystack" of mappings. + */ + SourceMapConsumer.prototype._findMapping = + function SourceMapConsumer_findMapping(aNeedle, aMappings, aLineName, + aColumnName, aComparator) { + // To return the position we are searching for, we must first find the + // mapping for the given position and then return the opposite position it + // points to. Because the mappings are sorted, we can use binary search to + // find the best mapping. + + if (aNeedle[aLineName] <= 0) { + throw new TypeError('Line must be greater than or equal to 1, got ' + + aNeedle[aLineName]); + } + if (aNeedle[aColumnName] < 0) { + throw new TypeError('Column must be greater than or equal to 0, got ' + + aNeedle[aColumnName]); + } + + return binarySearch.search(aNeedle, aMappings, aComparator); + }; + + /** + * Returns the original source, line, and column information for the generated + * source's line and column positions provided. The only argument is an object + * with the following properties: + * + * - line: The line number in the generated source. + * - column: The column number in the generated source. + * + * and an object is returned with the following properties: + * + * - source: The original source file, or null. + * - line: The line number in the original source, or null. + * - column: The column number in the original source, or null. + * - name: The original identifier, or null. + */ + SourceMapConsumer.prototype.originalPositionFor = + function SourceMapConsumer_originalPositionFor(aArgs) { + var needle = { + generatedLine: util.getArg(aArgs, 'line'), + generatedColumn: util.getArg(aArgs, 'column') + }; + + var mapping = this._findMapping(needle, + this._generatedMappings, + "generatedLine", + "generatedColumn", + util.compareByGeneratedPositions); + + if (mapping && mapping.generatedLine === needle.generatedLine) { + var source = util.getArg(mapping, 'source', null); + if (source && this.sourceRoot) { + source = util.join(this.sourceRoot, source); + } + return { + source: source, + line: util.getArg(mapping, 'originalLine', null), + column: util.getArg(mapping, 'originalColumn', null), + name: util.getArg(mapping, 'name', null) + }; + } + + return { + source: null, + line: null, + column: null, + name: null + }; + }; + + /** + * Returns the original source content. The only argument is the url of the + * original source file. Returns null if no original source content is + * availible. + */ + SourceMapConsumer.prototype.sourceContentFor = + function SourceMapConsumer_sourceContentFor(aSource) { + if (!this.sourcesContent) { + return null; + } + + if (this.sourceRoot) { + aSource = util.relative(this.sourceRoot, aSource); + } + + if (this._sources.has(aSource)) { + return this.sourcesContent[this._sources.indexOf(aSource)]; + } + + var url; + if (this.sourceRoot + && (url = util.urlParse(this.sourceRoot))) { + // XXX: file:// URIs and absolute paths lead to unexpected behavior for + // many users. We can help them out when they expect file:// URIs to + // behave like it would if they were running a local HTTP server. See + // https://bugzilla.mozilla.org/show_bug.cgi?id=885597. + var fileUriAbsPath = aSource.replace(/^file:\/\//, ""); + if (url.scheme == "file" + && this._sources.has(fileUriAbsPath)) { + return this.sourcesContent[this._sources.indexOf(fileUriAbsPath)] + } + + if ((!url.path || url.path == "/") + && this._sources.has("/" + aSource)) { + return this.sourcesContent[this._sources.indexOf("/" + aSource)]; + } + } + + throw new Error('"' + aSource + '" is not in the SourceMap.'); + }; + + /** + * Returns the generated line and column information for the original source, + * line, and column positions provided. The only argument is an object with + * the following properties: + * + * - source: The filename of the original source. + * - line: The line number in the original source. + * - column: The column number in the original source. + * + * and an object is returned with the following properties: + * + * - line: The line number in the generated source, or null. + * - column: The column number in the generated source, or null. + */ + SourceMapConsumer.prototype.generatedPositionFor = + function SourceMapConsumer_generatedPositionFor(aArgs) { + var needle = { + source: util.getArg(aArgs, 'source'), + originalLine: util.getArg(aArgs, 'line'), + originalColumn: util.getArg(aArgs, 'column') + }; + + if (this.sourceRoot) { + needle.source = util.relative(this.sourceRoot, needle.source); + } + + var mapping = this._findMapping(needle, + this._originalMappings, + "originalLine", + "originalColumn", + util.compareByOriginalPositions); + + if (mapping) { + return { + line: util.getArg(mapping, 'generatedLine', null), + column: util.getArg(mapping, 'generatedColumn', null) + }; + } + + return { + line: null, + column: null + }; + }; + + SourceMapConsumer.GENERATED_ORDER = 1; + SourceMapConsumer.ORIGINAL_ORDER = 2; + + /** + * Iterate over each mapping between an original source/line/column and a + * generated line/column in this source map. + * + * @param Function aCallback + * The function that is called with each mapping. + * @param Object aContext + * Optional. If specified, this object will be the value of `this` every + * time that `aCallback` is called. + * @param aOrder + * Either `SourceMapConsumer.GENERATED_ORDER` or + * `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to + * iterate over the mappings sorted by the generated file's line/column + * order or the original's source/line/column order, respectively. Defaults to + * `SourceMapConsumer.GENERATED_ORDER`. + */ + SourceMapConsumer.prototype.eachMapping = + function SourceMapConsumer_eachMapping(aCallback, aContext, aOrder) { + var context = aContext || null; + var order = aOrder || SourceMapConsumer.GENERATED_ORDER; + + var mappings; + switch (order) { + case SourceMapConsumer.GENERATED_ORDER: + mappings = this._generatedMappings; + break; + case SourceMapConsumer.ORIGINAL_ORDER: + mappings = this._originalMappings; + break; + default: + throw new Error("Unknown order of iteration."); + } + + var sourceRoot = this.sourceRoot; + mappings.map(function (mapping) { + var source = mapping.source; + if (source && sourceRoot) { + source = util.join(sourceRoot, source); + } + return { + source: source, + generatedLine: mapping.generatedLine, + generatedColumn: mapping.generatedColumn, + originalLine: mapping.originalLine, + originalColumn: mapping.originalColumn, + name: mapping.name + }; + }).forEach(aCallback, context); + }; + + exports.SourceMapConsumer = SourceMapConsumer; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-generator.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-generator.js new file mode 100644 index 00000000..d555f08c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-map-generator.js @@ -0,0 +1,397 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var base64VLQ = require('./base64-vlq'); + var util = require('./util'); + var ArraySet = require('./array-set').ArraySet; + + /** + * An instance of the SourceMapGenerator represents a source map which is + * being built incrementally. You may pass an object with the following + * properties: + * + * - file: The filename of the generated source. + * - sourceRoot: A root for all relative URLs in this source map. + */ + function SourceMapGenerator(aArgs) { + if (!aArgs) { + aArgs = {}; + } + this._file = util.getArg(aArgs, 'file', null); + this._sourceRoot = util.getArg(aArgs, 'sourceRoot', null); + this._sources = new ArraySet(); + this._names = new ArraySet(); + this._mappings = []; + this._sourcesContents = null; + } + + SourceMapGenerator.prototype._version = 3; + + /** + * Creates a new SourceMapGenerator based on a SourceMapConsumer + * + * @param aSourceMapConsumer The SourceMap. + */ + SourceMapGenerator.fromSourceMap = + function SourceMapGenerator_fromSourceMap(aSourceMapConsumer) { + var sourceRoot = aSourceMapConsumer.sourceRoot; + var generator = new SourceMapGenerator({ + file: aSourceMapConsumer.file, + sourceRoot: sourceRoot + }); + aSourceMapConsumer.eachMapping(function (mapping) { + var newMapping = { + generated: { + line: mapping.generatedLine, + column: mapping.generatedColumn + } + }; + + if (mapping.source) { + newMapping.source = mapping.source; + if (sourceRoot) { + newMapping.source = util.relative(sourceRoot, newMapping.source); + } + + newMapping.original = { + line: mapping.originalLine, + column: mapping.originalColumn + }; + + if (mapping.name) { + newMapping.name = mapping.name; + } + } + + generator.addMapping(newMapping); + }); + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content) { + generator.setSourceContent(sourceFile, content); + } + }); + return generator; + }; + + /** + * Add a single mapping from original source line and column to the generated + * source's line and column for this source map being created. The mapping + * object should have the following properties: + * + * - generated: An object with the generated line and column positions. + * - original: An object with the original line and column positions. + * - source: The original source file (relative to the sourceRoot). + * - name: An optional original token name for this mapping. + */ + SourceMapGenerator.prototype.addMapping = + function SourceMapGenerator_addMapping(aArgs) { + var generated = util.getArg(aArgs, 'generated'); + var original = util.getArg(aArgs, 'original', null); + var source = util.getArg(aArgs, 'source', null); + var name = util.getArg(aArgs, 'name', null); + + this._validateMapping(generated, original, source, name); + + if (source && !this._sources.has(source)) { + this._sources.add(source); + } + + if (name && !this._names.has(name)) { + this._names.add(name); + } + + this._mappings.push({ + generatedLine: generated.line, + generatedColumn: generated.column, + originalLine: original != null && original.line, + originalColumn: original != null && original.column, + source: source, + name: name + }); + }; + + /** + * Set the source content for a source file. + */ + SourceMapGenerator.prototype.setSourceContent = + function SourceMapGenerator_setSourceContent(aSourceFile, aSourceContent) { + var source = aSourceFile; + if (this._sourceRoot) { + source = util.relative(this._sourceRoot, source); + } + + if (aSourceContent !== null) { + // Add the source content to the _sourcesContents map. + // Create a new _sourcesContents map if the property is null. + if (!this._sourcesContents) { + this._sourcesContents = {}; + } + this._sourcesContents[util.toSetString(source)] = aSourceContent; + } else { + // Remove the source file from the _sourcesContents map. + // If the _sourcesContents map is empty, set the property to null. + delete this._sourcesContents[util.toSetString(source)]; + if (Object.keys(this._sourcesContents).length === 0) { + this._sourcesContents = null; + } + } + }; + + /** + * Applies the mappings of a sub-source-map for a specific source file to the + * source map being generated. Each mapping to the supplied source file is + * rewritten using the supplied source map. Note: The resolution for the + * resulting mappings is the minimium of this map and the supplied map. + * + * @param aSourceMapConsumer The source map to be applied. + * @param aSourceFile Optional. The filename of the source file. + * If omitted, SourceMapConsumer's file property will be used. + * @param aSourceMapPath Optional. The dirname of the path to the source map + * to be applied. If relative, it is relative to the SourceMapConsumer. + * This parameter is needed when the two source maps aren't in the same + * directory, and the source map to be applied contains relative source + * paths. If so, those relative source paths need to be rewritten + * relative to the SourceMapGenerator. + */ + SourceMapGenerator.prototype.applySourceMap = + function SourceMapGenerator_applySourceMap(aSourceMapConsumer, aSourceFile, aSourceMapPath) { + // If aSourceFile is omitted, we will use the file property of the SourceMap + if (!aSourceFile) { + if (!aSourceMapConsumer.file) { + throw new Error( + 'SourceMapGenerator.prototype.applySourceMap requires either an explicit source file, ' + + 'or the source map\'s "file" property. Both were omitted.' + ); + } + aSourceFile = aSourceMapConsumer.file; + } + var sourceRoot = this._sourceRoot; + // Make "aSourceFile" relative if an absolute Url is passed. + if (sourceRoot) { + aSourceFile = util.relative(sourceRoot, aSourceFile); + } + // Applying the SourceMap can add and remove items from the sources and + // the names array. + var newSources = new ArraySet(); + var newNames = new ArraySet(); + + // Find mappings for the "aSourceFile" + this._mappings.forEach(function (mapping) { + if (mapping.source === aSourceFile && mapping.originalLine) { + // Check if it can be mapped by the source map, then update the mapping. + var original = aSourceMapConsumer.originalPositionFor({ + line: mapping.originalLine, + column: mapping.originalColumn + }); + if (original.source !== null) { + // Copy mapping + mapping.source = original.source; + if (aSourceMapPath) { + mapping.source = util.join(aSourceMapPath, mapping.source) + } + if (sourceRoot) { + mapping.source = util.relative(sourceRoot, mapping.source); + } + mapping.originalLine = original.line; + mapping.originalColumn = original.column; + if (original.name !== null && mapping.name !== null) { + // Only use the identifier name if it's an identifier + // in both SourceMaps + mapping.name = original.name; + } + } + } + + var source = mapping.source; + if (source && !newSources.has(source)) { + newSources.add(source); + } + + var name = mapping.name; + if (name && !newNames.has(name)) { + newNames.add(name); + } + + }, this); + this._sources = newSources; + this._names = newNames; + + // Copy sourcesContents of applied map. + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content) { + if (sourceRoot) { + sourceFile = util.relative(sourceRoot, sourceFile); + } + this.setSourceContent(sourceFile, content); + } + }, this); + }; + + /** + * A mapping can have one of the three levels of data: + * + * 1. Just the generated position. + * 2. The Generated position, original position, and original source. + * 3. Generated and original position, original source, as well as a name + * token. + * + * To maintain consistency, we validate that any new mapping being added falls + * in to one of these categories. + */ + SourceMapGenerator.prototype._validateMapping = + function SourceMapGenerator_validateMapping(aGenerated, aOriginal, aSource, + aName) { + if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aGenerated.line > 0 && aGenerated.column >= 0 + && !aOriginal && !aSource && !aName) { + // Case 1. + return; + } + else if (aGenerated && 'line' in aGenerated && 'column' in aGenerated + && aOriginal && 'line' in aOriginal && 'column' in aOriginal + && aGenerated.line > 0 && aGenerated.column >= 0 + && aOriginal.line > 0 && aOriginal.column >= 0 + && aSource) { + // Cases 2 and 3. + return; + } + else { + throw new Error('Invalid mapping: ' + JSON.stringify({ + generated: aGenerated, + source: aSource, + original: aOriginal, + name: aName + })); + } + }; + + /** + * Serialize the accumulated mappings in to the stream of base 64 VLQs + * specified by the source map format. + */ + SourceMapGenerator.prototype._serializeMappings = + function SourceMapGenerator_serializeMappings() { + var previousGeneratedColumn = 0; + var previousGeneratedLine = 1; + var previousOriginalColumn = 0; + var previousOriginalLine = 0; + var previousName = 0; + var previousSource = 0; + var result = ''; + var mapping; + + // The mappings must be guaranteed to be in sorted order before we start + // serializing them or else the generated line numbers (which are defined + // via the ';' separators) will be all messed up. Note: it might be more + // performant to maintain the sorting as we insert them, rather than as we + // serialize them, but the big O is the same either way. + this._mappings.sort(util.compareByGeneratedPositions); + + for (var i = 0, len = this._mappings.length; i < len; i++) { + mapping = this._mappings[i]; + + if (mapping.generatedLine !== previousGeneratedLine) { + previousGeneratedColumn = 0; + while (mapping.generatedLine !== previousGeneratedLine) { + result += ';'; + previousGeneratedLine++; + } + } + else { + if (i > 0) { + if (!util.compareByGeneratedPositions(mapping, this._mappings[i - 1])) { + continue; + } + result += ','; + } + } + + result += base64VLQ.encode(mapping.generatedColumn + - previousGeneratedColumn); + previousGeneratedColumn = mapping.generatedColumn; + + if (mapping.source) { + result += base64VLQ.encode(this._sources.indexOf(mapping.source) + - previousSource); + previousSource = this._sources.indexOf(mapping.source); + + // lines are stored 0-based in SourceMap spec version 3 + result += base64VLQ.encode(mapping.originalLine - 1 + - previousOriginalLine); + previousOriginalLine = mapping.originalLine - 1; + + result += base64VLQ.encode(mapping.originalColumn + - previousOriginalColumn); + previousOriginalColumn = mapping.originalColumn; + + if (mapping.name) { + result += base64VLQ.encode(this._names.indexOf(mapping.name) + - previousName); + previousName = this._names.indexOf(mapping.name); + } + } + } + + return result; + }; + + SourceMapGenerator.prototype._generateSourcesContent = + function SourceMapGenerator_generateSourcesContent(aSources, aSourceRoot) { + return aSources.map(function (source) { + if (!this._sourcesContents) { + return null; + } + if (aSourceRoot) { + source = util.relative(aSourceRoot, source); + } + var key = util.toSetString(source); + return Object.prototype.hasOwnProperty.call(this._sourcesContents, + key) + ? this._sourcesContents[key] + : null; + }, this); + }; + + /** + * Externalize the source map. + */ + SourceMapGenerator.prototype.toJSON = + function SourceMapGenerator_toJSON() { + var map = { + version: this._version, + file: this._file, + sources: this._sources.toArray(), + names: this._names.toArray(), + mappings: this._serializeMappings() + }; + if (this._sourceRoot) { + map.sourceRoot = this._sourceRoot; + } + if (this._sourcesContents) { + map.sourcesContent = this._generateSourcesContent(map.sources, map.sourceRoot); + } + + return map; + }; + + /** + * Render the source map being generated to a string. + */ + SourceMapGenerator.prototype.toString = + function SourceMapGenerator_toString() { + return JSON.stringify(this); + }; + + exports.SourceMapGenerator = SourceMapGenerator; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-node.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-node.js new file mode 100644 index 00000000..1d98123b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/source-node.js @@ -0,0 +1,387 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var SourceMapGenerator = require('./source-map-generator').SourceMapGenerator; + var util = require('./util'); + + /** + * SourceNodes provide a way to abstract over interpolating/concatenating + * snippets of generated JavaScript source code while maintaining the line and + * column information associated with the original source code. + * + * @param aLine The original line number. + * @param aColumn The original column number. + * @param aSource The original source's filename. + * @param aChunks Optional. An array of strings which are snippets of + * generated JS, or other SourceNodes. + * @param aName The original identifier. + */ + function SourceNode(aLine, aColumn, aSource, aChunks, aName) { + this.children = []; + this.sourceContents = {}; + this.line = aLine === undefined ? null : aLine; + this.column = aColumn === undefined ? null : aColumn; + this.source = aSource === undefined ? null : aSource; + this.name = aName === undefined ? null : aName; + if (aChunks != null) this.add(aChunks); + } + + /** + * Creates a SourceNode from generated code and a SourceMapConsumer. + * + * @param aGeneratedCode The generated code + * @param aSourceMapConsumer The SourceMap for the generated code + */ + SourceNode.fromStringWithSourceMap = + function SourceNode_fromStringWithSourceMap(aGeneratedCode, aSourceMapConsumer) { + // The SourceNode we want to fill with the generated code + // and the SourceMap + var node = new SourceNode(); + + // The generated code + // Processed fragments are removed from this array. + var remainingLines = aGeneratedCode.split('\n'); + + // We need to remember the position of "remainingLines" + var lastGeneratedLine = 1, lastGeneratedColumn = 0; + + // The generate SourceNodes we need a code range. + // To extract it current and last mapping is used. + // Here we store the last mapping. + var lastMapping = null; + + aSourceMapConsumer.eachMapping(function (mapping) { + if (lastMapping !== null) { + // We add the code from "lastMapping" to "mapping": + // First check if there is a new line in between. + if (lastGeneratedLine < mapping.generatedLine) { + var code = ""; + // Associate first line with "lastMapping" + addMappingWithCode(lastMapping, remainingLines.shift() + "\n"); + lastGeneratedLine++; + lastGeneratedColumn = 0; + // The remaining code is added without mapping + } else { + // There is no new line in between. + // Associate the code between "lastGeneratedColumn" and + // "mapping.generatedColumn" with "lastMapping" + var nextLine = remainingLines[0]; + var code = nextLine.substr(0, mapping.generatedColumn - + lastGeneratedColumn); + remainingLines[0] = nextLine.substr(mapping.generatedColumn - + lastGeneratedColumn); + lastGeneratedColumn = mapping.generatedColumn; + addMappingWithCode(lastMapping, code); + // No more remaining code, continue + lastMapping = mapping; + return; + } + } + // We add the generated code until the first mapping + // to the SourceNode without any mapping. + // Each line is added as separate string. + while (lastGeneratedLine < mapping.generatedLine) { + node.add(remainingLines.shift() + "\n"); + lastGeneratedLine++; + } + if (lastGeneratedColumn < mapping.generatedColumn) { + var nextLine = remainingLines[0]; + node.add(nextLine.substr(0, mapping.generatedColumn)); + remainingLines[0] = nextLine.substr(mapping.generatedColumn); + lastGeneratedColumn = mapping.generatedColumn; + } + lastMapping = mapping; + }, this); + // We have processed all mappings. + if (remainingLines.length > 0) { + if (lastMapping) { + // Associate the remaining code in the current line with "lastMapping" + var lastLine = remainingLines.shift(); + if (remainingLines.length > 0) lastLine += "\n"; + addMappingWithCode(lastMapping, lastLine); + } + // and add the remaining lines without any mapping + node.add(remainingLines.join("\n")); + } + + // Copy sourcesContent into SourceNode + aSourceMapConsumer.sources.forEach(function (sourceFile) { + var content = aSourceMapConsumer.sourceContentFor(sourceFile); + if (content) { + node.setSourceContent(sourceFile, content); + } + }); + + return node; + + function addMappingWithCode(mapping, code) { + if (mapping === null || mapping.source === undefined) { + node.add(code); + } else { + node.add(new SourceNode(mapping.originalLine, + mapping.originalColumn, + mapping.source, + code, + mapping.name)); + } + } + }; + + /** + * Add a chunk of generated JS to this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.add = function SourceNode_add(aChunk) { + if (Array.isArray(aChunk)) { + aChunk.forEach(function (chunk) { + this.add(chunk); + }, this); + } + else if (aChunk instanceof SourceNode || typeof aChunk === "string") { + if (aChunk) { + this.children.push(aChunk); + } + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Add a chunk of generated JS to the beginning of this source node. + * + * @param aChunk A string snippet of generated JS code, another instance of + * SourceNode, or an array where each member is one of those things. + */ + SourceNode.prototype.prepend = function SourceNode_prepend(aChunk) { + if (Array.isArray(aChunk)) { + for (var i = aChunk.length-1; i >= 0; i--) { + this.prepend(aChunk[i]); + } + } + else if (aChunk instanceof SourceNode || typeof aChunk === "string") { + this.children.unshift(aChunk); + } + else { + throw new TypeError( + "Expected a SourceNode, string, or an array of SourceNodes and strings. Got " + aChunk + ); + } + return this; + }; + + /** + * Walk over the tree of JS snippets in this node and its children. The + * walking function is called once for each snippet of JS and is passed that + * snippet and the its original associated source's line/column location. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walk = function SourceNode_walk(aFn) { + var chunk; + for (var i = 0, len = this.children.length; i < len; i++) { + chunk = this.children[i]; + if (chunk instanceof SourceNode) { + chunk.walk(aFn); + } + else { + if (chunk !== '') { + aFn(chunk, { source: this.source, + line: this.line, + column: this.column, + name: this.name }); + } + } + } + }; + + /** + * Like `String.prototype.join` except for SourceNodes. Inserts `aStr` between + * each of `this.children`. + * + * @param aSep The separator. + */ + SourceNode.prototype.join = function SourceNode_join(aSep) { + var newChildren; + var i; + var len = this.children.length; + if (len > 0) { + newChildren = []; + for (i = 0; i < len-1; i++) { + newChildren.push(this.children[i]); + newChildren.push(aSep); + } + newChildren.push(this.children[i]); + this.children = newChildren; + } + return this; + }; + + /** + * Call String.prototype.replace on the very right-most source snippet. Useful + * for trimming whitespace from the end of a source node, etc. + * + * @param aPattern The pattern to replace. + * @param aReplacement The thing to replace the pattern with. + */ + SourceNode.prototype.replaceRight = function SourceNode_replaceRight(aPattern, aReplacement) { + var lastChild = this.children[this.children.length - 1]; + if (lastChild instanceof SourceNode) { + lastChild.replaceRight(aPattern, aReplacement); + } + else if (typeof lastChild === 'string') { + this.children[this.children.length - 1] = lastChild.replace(aPattern, aReplacement); + } + else { + this.children.push(''.replace(aPattern, aReplacement)); + } + return this; + }; + + /** + * Set the source content for a source file. This will be added to the SourceMapGenerator + * in the sourcesContent field. + * + * @param aSourceFile The filename of the source file + * @param aSourceContent The content of the source file + */ + SourceNode.prototype.setSourceContent = + function SourceNode_setSourceContent(aSourceFile, aSourceContent) { + this.sourceContents[util.toSetString(aSourceFile)] = aSourceContent; + }; + + /** + * Walk over the tree of SourceNodes. The walking function is called for each + * source file content and is passed the filename and source content. + * + * @param aFn The traversal function. + */ + SourceNode.prototype.walkSourceContents = + function SourceNode_walkSourceContents(aFn) { + for (var i = 0, len = this.children.length; i < len; i++) { + if (this.children[i] instanceof SourceNode) { + this.children[i].walkSourceContents(aFn); + } + } + + var sources = Object.keys(this.sourceContents); + for (var i = 0, len = sources.length; i < len; i++) { + aFn(util.fromSetString(sources[i]), this.sourceContents[sources[i]]); + } + }; + + /** + * Return the string representation of this source node. Walks over the tree + * and concatenates all the various snippets together to one string. + */ + SourceNode.prototype.toString = function SourceNode_toString() { + var str = ""; + this.walk(function (chunk) { + str += chunk; + }); + return str; + }; + + /** + * Returns the string representation of this source node along with a source + * map. + */ + SourceNode.prototype.toStringWithSourceMap = function SourceNode_toStringWithSourceMap(aArgs) { + var generated = { + code: "", + line: 1, + column: 0 + }; + var map = new SourceMapGenerator(aArgs); + var sourceMappingActive = false; + var lastOriginalSource = null; + var lastOriginalLine = null; + var lastOriginalColumn = null; + var lastOriginalName = null; + this.walk(function (chunk, original) { + generated.code += chunk; + if (original.source !== null + && original.line !== null + && original.column !== null) { + if(lastOriginalSource !== original.source + || lastOriginalLine !== original.line + || lastOriginalColumn !== original.column + || lastOriginalName !== original.name) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + lastOriginalSource = original.source; + lastOriginalLine = original.line; + lastOriginalColumn = original.column; + lastOriginalName = original.name; + sourceMappingActive = true; + } else if (sourceMappingActive) { + map.addMapping({ + generated: { + line: generated.line, + column: generated.column + } + }); + lastOriginalSource = null; + sourceMappingActive = false; + } + chunk.split('').forEach(function (ch, idx, array) { + if (ch === '\n') { + generated.line++; + generated.column = 0; + // Mappings end at eol + if (idx + 1 === array.length) { + lastOriginalSource = null; + sourceMappingActive = false; + } else if (sourceMappingActive) { + map.addMapping({ + source: original.source, + original: { + line: original.line, + column: original.column + }, + generated: { + line: generated.line, + column: generated.column + }, + name: original.name + }); + } + } else { + generated.column++; + } + }); + }); + this.walkSourceContents(function (sourceFile, sourceContent) { + map.setSourceContent(sourceFile, sourceContent); + }); + + return { code: generated.code, map: map }; + }; + + exports.SourceNode = SourceNode; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/util.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/util.js new file mode 100644 index 00000000..4316445f --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/lib/source-map/util.js @@ -0,0 +1,302 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + /** + * This is a helper function for getting values from parameter/options + * objects. + * + * @param args The object we are extracting values from + * @param name The name of the property we are getting. + * @param defaultValue An optional value to return if the property is missing + * from the object. If this is not specified and the property is missing, an + * error will be thrown. + */ + function getArg(aArgs, aName, aDefaultValue) { + if (aName in aArgs) { + return aArgs[aName]; + } else if (arguments.length === 3) { + return aDefaultValue; + } else { + throw new Error('"' + aName + '" is a required argument.'); + } + } + exports.getArg = getArg; + + var urlRegexp = /^(?:([\w+\-.]+):)?\/\/(?:(\w+:\w+)@)?([\w.]*)(?::(\d+))?(\S*)$/; + var dataUrlRegexp = /^data:.+\,.+$/; + + function urlParse(aUrl) { + var match = aUrl.match(urlRegexp); + if (!match) { + return null; + } + return { + scheme: match[1], + auth: match[2], + host: match[3], + port: match[4], + path: match[5] + }; + } + exports.urlParse = urlParse; + + function urlGenerate(aParsedUrl) { + var url = ''; + if (aParsedUrl.scheme) { + url += aParsedUrl.scheme + ':'; + } + url += '//'; + if (aParsedUrl.auth) { + url += aParsedUrl.auth + '@'; + } + if (aParsedUrl.host) { + url += aParsedUrl.host; + } + if (aParsedUrl.port) { + url += ":" + aParsedUrl.port + } + if (aParsedUrl.path) { + url += aParsedUrl.path; + } + return url; + } + exports.urlGenerate = urlGenerate; + + /** + * Normalizes a path, or the path portion of a URL: + * + * - Replaces consequtive slashes with one slash. + * - Removes unnecessary '.' parts. + * - Removes unnecessary '<dir>/..' parts. + * + * Based on code in the Node.js 'path' core module. + * + * @param aPath The path or url to normalize. + */ + function normalize(aPath) { + var path = aPath; + var url = urlParse(aPath); + if (url) { + if (!url.path) { + return aPath; + } + path = url.path; + } + var isAbsolute = (path.charAt(0) === '/'); + + var parts = path.split(/\/+/); + for (var part, up = 0, i = parts.length - 1; i >= 0; i--) { + part = parts[i]; + if (part === '.') { + parts.splice(i, 1); + } else if (part === '..') { + up++; + } else if (up > 0) { + if (part === '') { + // The first part is blank if the path is absolute. Trying to go + // above the root is a no-op. Therefore we can remove all '..' parts + // directly after the root. + parts.splice(i + 1, up); + up = 0; + } else { + parts.splice(i, 2); + up--; + } + } + } + path = parts.join('/'); + + if (path === '') { + path = isAbsolute ? '/' : '.'; + } + + if (url) { + url.path = path; + return urlGenerate(url); + } + return path; + } + exports.normalize = normalize; + + /** + * Joins two paths/URLs. + * + * @param aRoot The root path or URL. + * @param aPath The path or URL to be joined with the root. + * + * - If aPath is a URL or a data URI, aPath is returned, unless aPath is a + * scheme-relative URL: Then the scheme of aRoot, if any, is prepended + * first. + * - Otherwise aPath is a path. If aRoot is a URL, then its path portion + * is updated with the result and aRoot is returned. Otherwise the result + * is returned. + * - If aPath is absolute, the result is aPath. + * - Otherwise the two paths are joined with a slash. + * - Joining for example 'http://' and 'www.example.com' is also supported. + */ + function join(aRoot, aPath) { + var aPathUrl = urlParse(aPath); + var aRootUrl = urlParse(aRoot); + if (aRootUrl) { + aRoot = aRootUrl.path || '/'; + } + + // `join(foo, '//www.example.org')` + if (aPathUrl && !aPathUrl.scheme) { + if (aRootUrl) { + aPathUrl.scheme = aRootUrl.scheme; + } + return urlGenerate(aPathUrl); + } + + if (aPathUrl || aPath.match(dataUrlRegexp)) { + return aPath; + } + + // `join('http://', 'www.example.com')` + if (aRootUrl && !aRootUrl.host && !aRootUrl.path) { + aRootUrl.host = aPath; + return urlGenerate(aRootUrl); + } + + var joined = aPath.charAt(0) === '/' + ? aPath + : normalize(aRoot.replace(/\/+$/, '') + '/' + aPath); + + if (aRootUrl) { + aRootUrl.path = joined; + return urlGenerate(aRootUrl); + } + return joined; + } + exports.join = join; + + /** + * Because behavior goes wacky when you set `__proto__` on objects, we + * have to prefix all the strings in our set with an arbitrary character. + * + * See https://github.com/mozilla/source-map/pull/31 and + * https://github.com/mozilla/source-map/issues/30 + * + * @param String aStr + */ + function toSetString(aStr) { + return '$' + aStr; + } + exports.toSetString = toSetString; + + function fromSetString(aStr) { + return aStr.substr(1); + } + exports.fromSetString = fromSetString; + + function relative(aRoot, aPath) { + aRoot = aRoot.replace(/\/$/, ''); + + var url = urlParse(aRoot); + if (aPath.charAt(0) == "/" && url && url.path == "/") { + return aPath.slice(1); + } + + return aPath.indexOf(aRoot + '/') === 0 + ? aPath.substr(aRoot.length + 1) + : aPath; + } + exports.relative = relative; + + function strcmp(aStr1, aStr2) { + var s1 = aStr1 || ""; + var s2 = aStr2 || ""; + return (s1 > s2) - (s1 < s2); + } + + /** + * Comparator between two mappings where the original positions are compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same original source/line/column, but different generated + * line and column the same. Useful when searching for a mapping with a + * stubbed out mapping. + */ + function compareByOriginalPositions(mappingA, mappingB, onlyCompareOriginal) { + var cmp; + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp || onlyCompareOriginal) { + return cmp; + } + + cmp = strcmp(mappingA.name, mappingB.name); + if (cmp) { + return cmp; + } + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp) { + return cmp; + } + + return mappingA.generatedColumn - mappingB.generatedColumn; + }; + exports.compareByOriginalPositions = compareByOriginalPositions; + + /** + * Comparator between two mappings where the generated positions are + * compared. + * + * Optionally pass in `true` as `onlyCompareGenerated` to consider two + * mappings with the same generated line and column, but different + * source/name/original line and column the same. Useful when searching for a + * mapping with a stubbed out mapping. + */ + function compareByGeneratedPositions(mappingA, mappingB, onlyCompareGenerated) { + var cmp; + + cmp = mappingA.generatedLine - mappingB.generatedLine; + if (cmp) { + return cmp; + } + + cmp = mappingA.generatedColumn - mappingB.generatedColumn; + if (cmp || onlyCompareGenerated) { + return cmp; + } + + cmp = strcmp(mappingA.source, mappingB.source); + if (cmp) { + return cmp; + } + + cmp = mappingA.originalLine - mappingB.originalLine; + if (cmp) { + return cmp; + } + + cmp = mappingA.originalColumn - mappingB.originalColumn; + if (cmp) { + return cmp; + } + + return strcmp(mappingA.name, mappingB.name); + }; + exports.compareByGeneratedPositions = compareByGeneratedPositions; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/LICENSE b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/LICENSE new file mode 100644 index 00000000..f33d665d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/LICENSE @@ -0,0 +1,58 @@ +amdefine is released under two licenses: new BSD, and MIT. You may pick the +license that best suits your development needs. The text of both licenses are +provided below. + + +The "New" BSD License: +---------------------- + +Copyright (c) 2011, The Dojo Foundation +All rights reserved. + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: + + * Redistributions of source code must retain the above copyright notice, this + list of conditions and the following disclaimer. + * Redistributions in binary form must reproduce the above copyright notice, + this list of conditions and the following disclaimer in the documentation + and/or other materials provided with the distribution. + * Neither the name of the Dojo Foundation nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE +FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + + + +MIT License +----------- + +Copyright (c) 2011, The Dojo Foundation + +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-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/README.md b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/README.md new file mode 100644 index 00000000..c6995c07 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/README.md @@ -0,0 +1,171 @@ +# amdefine + +A module that can be used to implement AMD's define() in Node. This allows you +to code to the AMD API and have the module work in node programs without +requiring those other programs to use AMD. + +## Usage + +**1)** Update your package.json to indicate amdefine as a dependency: + +```javascript + "dependencies": { + "amdefine": ">=0.1.0" + } +``` + +Then run `npm install` to get amdefine into your project. + +**2)** At the top of each module that uses define(), place this code: + +```javascript +if (typeof define !== 'function') { var define = require('amdefine')(module) } +``` + +**Only use these snippets** when loading amdefine. If you preserve the basic structure, +with the braces, it will be stripped out when using the [RequireJS optimizer](#optimizer). + +You can add spaces, line breaks and even require amdefine with a local path, but +keep the rest of the structure to get the stripping behavior. + +As you may know, because `if` statements in JavaScript don't have their own scope, the var +declaration in the above snippet is made whether the `if` expression is truthy or not. If +RequireJS is loaded then the declaration is superfluous because `define` is already already +declared in the same scope in RequireJS. Fortunately JavaScript handles multiple `var` +declarations of the same variable in the same scope gracefully. + +If you want to deliver amdefine.js with your code rather than specifying it as a dependency +with npm, then just download the latest release and refer to it using a relative path: + +[Latest Version](https://github.com/jrburke/amdefine/raw/latest/amdefine.js) + +### amdefine/intercept + +Consider this very experimental. + +Instead of pasting the piece of text for the amdefine setup of a `define` +variable in each module you create or consume, you can use `amdefine/intercept` +instead. It will automatically insert the above snippet in each .js file loaded +by Node. + +**Warning**: you should only use this if you are creating an application that +is consuming AMD style defined()'d modules that are distributed via npm and want +to run that code in Node. + +For library code where you are not sure if it will be used by others in Node or +in the browser, then explicitly depending on amdefine and placing the code +snippet above is suggested path, instead of using `amdefine/intercept`. The +intercept module affects all .js files loaded in the Node app, and it is +inconsiderate to modify global state like that unless you are also controlling +the top level app. + +#### Why distribute AMD-style nodes via npm? + +npm has a lot of weaknesses for front-end use (installed layout is not great, +should have better support for the `baseUrl + moduleID + '.js' style of loading, +single file JS installs), but some people want a JS package manager and are +willing to live with those constraints. If that is you, but still want to author +in AMD style modules to get dynamic require([]), better direct source usage and +powerful loader plugin support in the browser, then this tool can help. + +#### amdefine/intercept usage + +Just require it in your top level app module (for example index.js, server.js): + +```javascript +require('amdefine/intercept'); +``` + +The module does not return a value, so no need to assign the result to a local +variable. + +Then just require() code as you normally would with Node's require(). Any .js +loaded after the intercept require will have the amdefine check injected in +the .js source as it is loaded. It does not modify the source on disk, just +prepends some content to the text of the module as it is loaded by Node. + +#### How amdefine/intercept works + +It overrides the `Module._extensions['.js']` in Node to automatically prepend +the amdefine snippet above. So, it will affect any .js file loaded by your +app. + +## define() usage + +It is best if you use the anonymous forms of define() in your module: + +```javascript +define(function (require) { + var dependency = require('dependency'); +}); +``` + +or + +```javascript +define(['dependency'], function (dependency) { + +}); +``` + +## RequireJS optimizer integration. <a name="optimizer"></name> + +Version 1.0.3 of the [RequireJS optimizer](http://requirejs.org/docs/optimization.html) +will have support for stripping the `if (typeof define !== 'function')` check +mentioned above, so you can include this snippet for code that runs in the +browser, but avoid taking the cost of the if() statement once the code is +optimized for deployment. + +## Node 0.4 Support + +If you want to support Node 0.4, then add `require` as the second parameter to amdefine: + +```javascript +//Only if you want Node 0.4. If using 0.5 or later, use the above snippet. +if (typeof define !== 'function') { var define = require('amdefine')(module, require) } +``` + +## Limitations + +### Synchronous vs Asynchronous + +amdefine creates a define() function that is callable by your code. It will +execute and trace dependencies and call the factory function *synchronously*, +to keep the behavior in line with Node's synchronous dependency tracing. + +The exception: calling AMD's callback-style require() from inside a factory +function. The require callback is called on process.nextTick(): + +```javascript +define(function (require) { + require(['a'], function(a) { + //'a' is loaded synchronously, but + //this callback is called on process.nextTick(). + }); +}); +``` + +### Loader Plugins + +Loader plugins are supported as long as they call their load() callbacks +synchronously. So ones that do network requests will not work. However plugins +like [text](http://requirejs.org/docs/api.html#text) can load text files locally. + +The plugin API's `load.fromText()` is **not supported** in amdefine, so this means +transpiler plugins like the [CoffeeScript loader plugin](https://github.com/jrburke/require-cs) +will not work. This may be fixable, but it is a bit complex, and I do not have +enough node-fu to figure it out yet. See the source for amdefine.js if you want +to get an idea of the issues involved. + +## Tests + +To run the tests, cd to **tests** and run: + +``` +node all.js +node all-intercept.js +``` + +## License + +New BSD and MIT. Check the LICENSE file for all the details. diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/amdefine.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/amdefine.js new file mode 100644 index 00000000..53bf5a68 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/amdefine.js @@ -0,0 +1,299 @@ +/** vim: et:ts=4:sw=4:sts=4 + * @license amdefine 0.1.0 Copyright (c) 2011, The Dojo Foundation All Rights Reserved. + * Available via the MIT or new BSD license. + * see: http://github.com/jrburke/amdefine for details + */ + +/*jslint node: true */ +/*global module, process */ +'use strict'; + +/** + * Creates a define for node. + * @param {Object} module the "module" object that is defined by Node for the + * current module. + * @param {Function} [requireFn]. Node's require function for the current module. + * It only needs to be passed in Node versions before 0.5, when module.require + * did not exist. + * @returns {Function} a define function that is usable for the current node + * module. + */ +function amdefine(module, requireFn) { + 'use strict'; + var defineCache = {}, + loaderCache = {}, + alreadyCalled = false, + path = require('path'), + makeRequire, stringRequire; + + /** + * Trims the . and .. from an array of path segments. + * It will keep a leading path segment if a .. will become + * the first path segment, to help with module name lookups, + * which act like paths, but can be remapped. But the end result, + * all paths that use this function should look normalized. + * NOTE: this method MODIFIES the input array. + * @param {Array} ary the array of path segments. + */ + function trimDots(ary) { + var i, part; + for (i = 0; ary[i]; i+= 1) { + part = ary[i]; + if (part === '.') { + ary.splice(i, 1); + i -= 1; + } else if (part === '..') { + if (i === 1 && (ary[2] === '..' || ary[0] === '..')) { + //End of the line. Keep at least one non-dot + //path segment at the front so it can be mapped + //correctly to disk. Otherwise, there is likely + //no path mapping for a path starting with '..'. + //This can still fail, but catches the most reasonable + //uses of .. + break; + } else if (i > 0) { + ary.splice(i - 1, 2); + i -= 2; + } + } + } + } + + function normalize(name, baseName) { + var baseParts; + + //Adjust any relative paths. + if (name && name.charAt(0) === '.') { + //If have a base name, try to normalize against it, + //otherwise, assume it is a top-level require that will + //be relative to baseUrl in the end. + if (baseName) { + baseParts = baseName.split('/'); + baseParts = baseParts.slice(0, baseParts.length - 1); + baseParts = baseParts.concat(name.split('/')); + trimDots(baseParts); + name = baseParts.join('/'); + } + } + + return name; + } + + /** + * Create the normalize() function passed to a loader plugin's + * normalize method. + */ + function makeNormalize(relName) { + return function (name) { + return normalize(name, relName); + }; + } + + function makeLoad(id) { + function load(value) { + loaderCache[id] = value; + } + + load.fromText = function (id, text) { + //This one is difficult because the text can/probably uses + //define, and any relative paths and requires should be relative + //to that id was it would be found on disk. But this would require + //bootstrapping a module/require fairly deeply from node core. + //Not sure how best to go about that yet. + throw new Error('amdefine does not implement load.fromText'); + }; + + return load; + } + + makeRequire = function (systemRequire, exports, module, relId) { + function amdRequire(deps, callback) { + if (typeof deps === 'string') { + //Synchronous, single module require('') + return stringRequire(systemRequire, exports, module, deps, relId); + } else { + //Array of dependencies with a callback. + + //Convert the dependencies to modules. + deps = deps.map(function (depName) { + return stringRequire(systemRequire, exports, module, depName, relId); + }); + + //Wait for next tick to call back the require call. + process.nextTick(function () { + callback.apply(null, deps); + }); + } + } + + amdRequire.toUrl = function (filePath) { + if (filePath.indexOf('.') === 0) { + return normalize(filePath, path.dirname(module.filename)); + } else { + return filePath; + } + }; + + return amdRequire; + }; + + //Favor explicit value, passed in if the module wants to support Node 0.4. + requireFn = requireFn || function req() { + return module.require.apply(module, arguments); + }; + + function runFactory(id, deps, factory) { + var r, e, m, result; + + if (id) { + e = loaderCache[id] = {}; + m = { + id: id, + uri: __filename, + exports: e + }; + r = makeRequire(requireFn, e, m, id); + } else { + //Only support one define call per file + if (alreadyCalled) { + throw new Error('amdefine with no module ID cannot be called more than once per file.'); + } + alreadyCalled = true; + + //Use the real variables from node + //Use module.exports for exports, since + //the exports in here is amdefine exports. + e = module.exports; + m = module; + r = makeRequire(requireFn, e, m, module.id); + } + + //If there are dependencies, they are strings, so need + //to convert them to dependency values. + if (deps) { + deps = deps.map(function (depName) { + return r(depName); + }); + } + + //Call the factory with the right dependencies. + if (typeof factory === 'function') { + result = factory.apply(m.exports, deps); + } else { + result = factory; + } + + if (result !== undefined) { + m.exports = result; + if (id) { + loaderCache[id] = m.exports; + } + } + } + + stringRequire = function (systemRequire, exports, module, id, relId) { + //Split the ID by a ! so that + var index = id.indexOf('!'), + originalId = id, + prefix, plugin; + + if (index === -1) { + id = normalize(id, relId); + + //Straight module lookup. If it is one of the special dependencies, + //deal with it, otherwise, delegate to node. + if (id === 'require') { + return makeRequire(systemRequire, exports, module, relId); + } else if (id === 'exports') { + return exports; + } else if (id === 'module') { + return module; + } else if (loaderCache.hasOwnProperty(id)) { + return loaderCache[id]; + } else if (defineCache[id]) { + runFactory.apply(null, defineCache[id]); + return loaderCache[id]; + } else { + if(systemRequire) { + return systemRequire(originalId); + } else { + throw new Error('No module with ID: ' + id); + } + } + } else { + //There is a plugin in play. + prefix = id.substring(0, index); + id = id.substring(index + 1, id.length); + + plugin = stringRequire(systemRequire, exports, module, prefix, relId); + + if (plugin.normalize) { + id = plugin.normalize(id, makeNormalize(relId)); + } else { + //Normalize the ID normally. + id = normalize(id, relId); + } + + if (loaderCache[id]) { + return loaderCache[id]; + } else { + plugin.load(id, makeRequire(systemRequire, exports, module, relId), makeLoad(id), {}); + + return loaderCache[id]; + } + } + }; + + //Create a define function specific to the module asking for amdefine. + function define(id, deps, factory) { + if (Array.isArray(id)) { + factory = deps; + deps = id; + id = undefined; + } else if (typeof id !== 'string') { + factory = id; + id = deps = undefined; + } + + if (deps && !Array.isArray(deps)) { + factory = deps; + deps = undefined; + } + + if (!deps) { + deps = ['require', 'exports', 'module']; + } + + //Set up properties for this module. If an ID, then use + //internal cache. If no ID, then use the external variables + //for this node module. + if (id) { + //Put the module in deep freeze until there is a + //require call for it. + defineCache[id] = [id, deps, factory]; + } else { + runFactory(id, deps, factory); + } + } + + //define.require, which has access to all the values in the + //cache. Useful for AMD modules that all have IDs in the file, + //but need to finally export a value to node based on one of those + //IDs. + define.require = function (id) { + if (loaderCache[id]) { + return loaderCache[id]; + } + + if (defineCache[id]) { + runFactory.apply(null, defineCache[id]); + return loaderCache[id]; + } + }; + + define.amd = {}; + + return define; +} + +module.exports = amdefine; diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/intercept.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/intercept.js new file mode 100644 index 00000000..771a9830 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/intercept.js @@ -0,0 +1,36 @@ +/*jshint node: true */ +var inserted, + Module = require('module'), + fs = require('fs'), + existingExtFn = Module._extensions['.js'], + amdefineRegExp = /amdefine\.js/; + +inserted = "if (typeof define !== 'function') {var define = require('amdefine')(module)}"; + +//From the node/lib/module.js source: +function stripBOM(content) { + // Remove byte order marker. This catches EF BB BF (the UTF-8 BOM) + // because the buffer-to-string conversion in `fs.readFileSync()` + // translates it to FEFF, the UTF-16 BOM. + if (content.charCodeAt(0) === 0xFEFF) { + content = content.slice(1); + } + return content; +} + +//Also adapted from the node/lib/module.js source: +function intercept(module, filename) { + var content = stripBOM(fs.readFileSync(filename, 'utf8')); + + if (!amdefineRegExp.test(module.id)) { + content = inserted + content; + } + + module._compile(content, filename); +} + +intercept._id = 'amdefine/intercept'; + +if (!existingExtFn._id || existingExtFn._id !== intercept._id) { + Module._extensions['.js'] = intercept; +} diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/package.json b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/package.json new file mode 100644 index 00000000..8caf15c5 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/node_modules/amdefine/package.json @@ -0,0 +1,36 @@ +{ + "name": "amdefine", + "description": "Provide AMD's define() API for declaring modules in the AMD format", + "version": "0.1.0", + "homepage": "http://github.com/jrburke/amdefine", + "author": { + "name": "James Burke", + "email": "jrburke@gmail.com", + "url": "http://github.com/jrburke" + }, + "licenses": [ + { + "type": "BSD", + "url": "https://github.com/jrburke/amdefine/blob/master/LICENSE" + }, + { + "type": "MIT", + "url": "https://github.com/jrburke/amdefine/blob/master/LICENSE" + } + ], + "repository": { + "type": "git", + "url": "https://github.com/jrburke/amdefine.git" + }, + "main": "./amdefine.js", + "engines": { + "node": ">=0.4.2" + }, + "readme": "# amdefine\n\nA module that can be used to implement AMD's define() in Node. This allows you\nto code to the AMD API and have the module work in node programs without\nrequiring those other programs to use AMD.\n\n## Usage\n\n**1)** Update your package.json to indicate amdefine as a dependency:\n\n```javascript\n \"dependencies\": {\n \"amdefine\": \">=0.1.0\"\n }\n```\n\nThen run `npm install` to get amdefine into your project.\n\n**2)** At the top of each module that uses define(), place this code:\n\n```javascript\nif (typeof define !== 'function') { var define = require('amdefine')(module) }\n```\n\n**Only use these snippets** when loading amdefine. If you preserve the basic structure,\nwith the braces, it will be stripped out when using the [RequireJS optimizer](#optimizer).\n\nYou can add spaces, line breaks and even require amdefine with a local path, but\nkeep the rest of the structure to get the stripping behavior.\n\nAs you may know, because `if` statements in JavaScript don't have their own scope, the var\ndeclaration in the above snippet is made whether the `if` expression is truthy or not. If\nRequireJS is loaded then the declaration is superfluous because `define` is already already\ndeclared in the same scope in RequireJS. Fortunately JavaScript handles multiple `var`\ndeclarations of the same variable in the same scope gracefully.\n\nIf you want to deliver amdefine.js with your code rather than specifying it as a dependency\nwith npm, then just download the latest release and refer to it using a relative path:\n\n[Latest Version](https://github.com/jrburke/amdefine/raw/latest/amdefine.js)\n\n### amdefine/intercept\n\nConsider this very experimental.\n\nInstead of pasting the piece of text for the amdefine setup of a `define`\nvariable in each module you create or consume, you can use `amdefine/intercept`\ninstead. It will automatically insert the above snippet in each .js file loaded\nby Node.\n\n**Warning**: you should only use this if you are creating an application that\nis consuming AMD style defined()'d modules that are distributed via npm and want\nto run that code in Node.\n\nFor library code where you are not sure if it will be used by others in Node or\nin the browser, then explicitly depending on amdefine and placing the code\nsnippet above is suggested path, instead of using `amdefine/intercept`. The\nintercept module affects all .js files loaded in the Node app, and it is\ninconsiderate to modify global state like that unless you are also controlling\nthe top level app.\n\n#### Why distribute AMD-style nodes via npm?\n\nnpm has a lot of weaknesses for front-end use (installed layout is not great,\nshould have better support for the `baseUrl + moduleID + '.js' style of loading,\nsingle file JS installs), but some people want a JS package manager and are\nwilling to live with those constraints. If that is you, but still want to author\nin AMD style modules to get dynamic require([]), better direct source usage and\npowerful loader plugin support in the browser, then this tool can help.\n\n#### amdefine/intercept usage\n\nJust require it in your top level app module (for example index.js, server.js):\n\n```javascript\nrequire('amdefine/intercept');\n```\n\nThe module does not return a value, so no need to assign the result to a local\nvariable.\n\nThen just require() code as you normally would with Node's require(). Any .js\nloaded after the intercept require will have the amdefine check injected in\nthe .js source as it is loaded. It does not modify the source on disk, just\nprepends some content to the text of the module as it is loaded by Node.\n\n#### How amdefine/intercept works\n\nIt overrides the `Module._extensions['.js']` in Node to automatically prepend\nthe amdefine snippet above. So, it will affect any .js file loaded by your\napp.\n\n## define() usage\n\nIt is best if you use the anonymous forms of define() in your module:\n\n```javascript\ndefine(function (require) {\n var dependency = require('dependency');\n});\n```\n\nor\n\n```javascript\ndefine(['dependency'], function (dependency) {\n\n});\n```\n\n## RequireJS optimizer integration. <a name=\"optimizer\"></name>\n\nVersion 1.0.3 of the [RequireJS optimizer](http://requirejs.org/docs/optimization.html)\nwill have support for stripping the `if (typeof define !== 'function')` check\nmentioned above, so you can include this snippet for code that runs in the\nbrowser, but avoid taking the cost of the if() statement once the code is\noptimized for deployment.\n\n## Node 0.4 Support\n\nIf you want to support Node 0.4, then add `require` as the second parameter to amdefine:\n\n```javascript\n//Only if you want Node 0.4. If using 0.5 or later, use the above snippet.\nif (typeof define !== 'function') { var define = require('amdefine')(module, require) }\n```\n\n## Limitations\n\n### Synchronous vs Asynchronous\n\namdefine creates a define() function that is callable by your code. It will\nexecute and trace dependencies and call the factory function *synchronously*,\nto keep the behavior in line with Node's synchronous dependency tracing.\n\nThe exception: calling AMD's callback-style require() from inside a factory\nfunction. The require callback is called on process.nextTick():\n\n```javascript\ndefine(function (require) {\n require(['a'], function(a) {\n //'a' is loaded synchronously, but\n //this callback is called on process.nextTick().\n });\n});\n```\n\n### Loader Plugins\n\nLoader plugins are supported as long as they call their load() callbacks\nsynchronously. So ones that do network requests will not work. However plugins\nlike [text](http://requirejs.org/docs/api.html#text) can load text files locally.\n\nThe plugin API's `load.fromText()` is **not supported** in amdefine, so this means\ntranspiler plugins like the [CoffeeScript loader plugin](https://github.com/jrburke/require-cs)\nwill not work. This may be fixable, but it is a bit complex, and I do not have\nenough node-fu to figure it out yet. See the source for amdefine.js if you want\nto get an idea of the issues involved.\n\n## Tests\n\nTo run the tests, cd to **tests** and run:\n\n```\nnode all.js\nnode all-intercept.js\n```\n\n## License\n\nNew BSD and MIT. Check the LICENSE file for all the details.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/jrburke/amdefine/issues" + }, + "_id": "amdefine@0.1.0", + "_from": "amdefine@>=0.0.4" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/package.json b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/package.json new file mode 100644 index 00000000..132d4562 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/package.json @@ -0,0 +1,126 @@ +{ + "name": "source-map", + "description": "Generates and consumes source maps", + "version": "0.1.33", + "homepage": "https://github.com/mozilla/source-map", + "author": { + "name": "Nick Fitzgerald", + "email": "nfitzgerald@mozilla.com" + }, + "contributors": [ + { + "name": "Tobias Koppers", + "email": "tobias.koppers@googlemail.com" + }, + { + "name": "Duncan Beevers", + "email": "duncan@dweebd.com" + }, + { + "name": "Stephen Crane", + "email": "scrane@mozilla.com" + }, + { + "name": "Ryan Seddon", + "email": "seddon.ryan@gmail.com" + }, + { + "name": "Miles Elam", + "email": "miles.elam@deem.com" + }, + { + "name": "Mihai Bazon", + "email": "mihai.bazon@gmail.com" + }, + { + "name": "Michael Ficarra", + "email": "github.public.email@michael.ficarra.me" + }, + { + "name": "Todd Wolfson", + "email": "todd@twolfson.com" + }, + { + "name": "Alexander Solovyov", + "email": "alexander@solovyov.net" + }, + { + "name": "Felix Gnass", + "email": "fgnass@gmail.com" + }, + { + "name": "Conrad Irwin", + "email": "conrad.irwin@gmail.com" + }, + { + "name": "usrbincc", + "email": "usrbincc@yahoo.com" + }, + { + "name": "David Glasser", + "email": "glasser@davidglasser.net" + }, + { + "name": "Chase Douglas", + "email": "chase@newrelic.com" + }, + { + "name": "Evan Wallace", + "email": "evan.exe@gmail.com" + }, + { + "name": "Heather Arthur", + "email": "fayearthur@gmail.com" + }, + { + "name": "Hugh Kennedy", + "email": "hughskennedy@gmail.com" + }, + { + "name": "David Glasser", + "email": "glasser@davidglasser.net" + }, + { + "name": "Simon Lydell", + "email": "simon.lydell@gmail.com" + }, + { + "name": "Jmeas Smith", + "email": "jellyes2@gmail.com" + } + ], + "repository": { + "type": "git", + "url": "http://github.com/mozilla/source-map.git" + }, + "directories": { + "lib": "./lib" + }, + "main": "./lib/source-map.js", + "engines": { + "node": ">=0.8.0" + }, + "licenses": [ + { + "type": "BSD", + "url": "http://opensource.org/licenses/BSD-3-Clause" + } + ], + "dependencies": { + "amdefine": ">=0.0.4" + }, + "devDependencies": { + "dryice": ">=0.4.8" + }, + "scripts": { + "test": "node test/run-tests.js", + "build": "node Makefile.dryice.js" + }, + "readme": "# Source Map\n\nThis is a library to generate and consume the source map format\n[described here][format].\n\nThis library is written in the Asynchronous Module Definition format, and works\nin the following environments:\n\n* Modern Browsers supporting ECMAScript 5 (either after the build, or with an\n AMD loader such as RequireJS)\n\n* Inside Firefox (as a JSM file, after the build)\n\n* With NodeJS versions 0.8.X and higher\n\n## Node\n\n $ npm install source-map\n\n## Building from Source (for everywhere else)\n\nInstall Node and then run\n\n $ git clone https://fitzgen@github.com/mozilla/source-map.git\n $ cd source-map\n $ npm link .\n\nNext, run\n\n $ node Makefile.dryice.js\n\nThis should spew a bunch of stuff to stdout, and create the following files:\n\n* `dist/source-map.js` - The unminified browser version.\n\n* `dist/source-map.min.js` - The minified browser version.\n\n* `dist/SourceMap.jsm` - The JavaScript Module for inclusion in Firefox source.\n\n## Examples\n\n### Consuming a source map\n\n var rawSourceMap = {\n version: 3,\n file: 'min.js',\n names: ['bar', 'baz', 'n'],\n sources: ['one.js', 'two.js'],\n sourceRoot: 'http://example.com/www/js/',\n mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA'\n };\n\n var smc = new SourceMapConsumer(rawSourceMap);\n\n console.log(smc.sources);\n // [ 'http://example.com/www/js/one.js',\n // 'http://example.com/www/js/two.js' ]\n\n console.log(smc.originalPositionFor({\n line: 2,\n column: 28\n }));\n // { source: 'http://example.com/www/js/two.js',\n // line: 2,\n // column: 10,\n // name: 'n' }\n\n console.log(smc.generatedPositionFor({\n source: 'http://example.com/www/js/two.js',\n line: 2,\n column: 10\n }));\n // { line: 2, column: 28 }\n\n smc.eachMapping(function (m) {\n // ...\n });\n\n### Generating a source map\n\nIn depth guide:\n[**Compiling to JavaScript, and Debugging with Source Maps**](https://hacks.mozilla.org/2013/05/compiling-to-javascript-and-debugging-with-source-maps/)\n\n#### With SourceNode (high level API)\n\n function compile(ast) {\n switch (ast.type) {\n case 'BinaryExpression':\n return new SourceNode(\n ast.location.line,\n ast.location.column,\n ast.location.source,\n [compile(ast.left), \" + \", compile(ast.right)]\n );\n case 'Literal':\n return new SourceNode(\n ast.location.line,\n ast.location.column,\n ast.location.source,\n String(ast.value)\n );\n // ...\n default:\n throw new Error(\"Bad AST\");\n }\n }\n\n var ast = parse(\"40 + 2\", \"add.js\");\n console.log(compile(ast).toStringWithSourceMap({\n file: 'add.js'\n }));\n // { code: '40 + 2',\n // map: [object SourceMapGenerator] }\n\n#### With SourceMapGenerator (low level API)\n\n var map = new SourceMapGenerator({\n file: \"source-mapped.js\"\n });\n\n map.addMapping({\n generated: {\n line: 10,\n column: 35\n },\n source: \"foo.js\",\n original: {\n line: 33,\n column: 2\n },\n name: \"christopher\"\n });\n\n console.log(map.toString());\n // '{\"version\":3,\"file\":\"source-mapped.js\",\"sources\":[\"foo.js\"],\"names\":[\"christopher\"],\"mappings\":\";;;;;;;;;mCAgCEA\"}'\n\n## API\n\nGet a reference to the module:\n\n // NodeJS\n var sourceMap = require('source-map');\n\n // Browser builds\n var sourceMap = window.sourceMap;\n\n // Inside Firefox\n let sourceMap = {};\n Components.utils.import('resource:///modules/devtools/SourceMap.jsm', sourceMap);\n\n### SourceMapConsumer\n\nA SourceMapConsumer instance represents a parsed source map which we can query\nfor information about the original file positions by giving it a file position\nin the generated source.\n\n#### new SourceMapConsumer(rawSourceMap)\n\nThe only parameter is the raw source map (either as a string which can be\n`JSON.parse`'d, or an object). According to the spec, source maps have the\nfollowing attributes:\n\n* `version`: Which version of the source map spec this map is following.\n\n* `sources`: An array of URLs to the original source files.\n\n* `names`: An array of identifiers which can be referrenced by individual\n mappings.\n\n* `sourceRoot`: Optional. The URL root from which all sources are relative.\n\n* `sourcesContent`: Optional. An array of contents of the original source files.\n\n* `mappings`: A string of base64 VLQs which contain the actual mappings.\n\n* `file`: Optional. The generated filename this source map is associated with.\n\n#### SourceMapConsumer.prototype.originalPositionFor(generatedPosition)\n\nReturns the original source, line, and column information for the generated\nsource's line and column positions provided. The only argument is an object with\nthe following properties:\n\n* `line`: The line number in the generated source.\n\n* `column`: The column number in the generated source.\n\nand an object is returned with the following properties:\n\n* `source`: The original source file, or null if this information is not\n available.\n\n* `line`: The line number in the original source, or null if this information is\n not available.\n\n* `column`: The column number in the original source, or null or null if this\n information is not available.\n\n* `name`: The original identifier, or null if this information is not available.\n\n#### SourceMapConsumer.prototype.generatedPositionFor(originalPosition)\n\nReturns the generated line and column information for the original source,\nline, and column positions provided. The only argument is an object with\nthe following properties:\n\n* `source`: The filename of the original source.\n\n* `line`: The line number in the original source.\n\n* `column`: The column number in the original source.\n\nand an object is returned with the following properties:\n\n* `line`: The line number in the generated source, or null.\n\n* `column`: The column number in the generated source, or null.\n\n#### SourceMapConsumer.prototype.sourceContentFor(source)\n\nReturns the original source content for the source provided. The only\nargument is the URL of the original source file.\n\n#### SourceMapConsumer.prototype.eachMapping(callback, context, order)\n\nIterate over each mapping between an original source/line/column and a\ngenerated line/column in this source map.\n\n* `callback`: The function that is called with each mapping. Mappings have the\n form `{ source, generatedLine, generatedColumn, originalLine, originalColumn,\n name }`\n\n* `context`: Optional. If specified, this object will be the value of `this`\n every time that `callback` is called.\n\n* `order`: Either `SourceMapConsumer.GENERATED_ORDER` or\n `SourceMapConsumer.ORIGINAL_ORDER`. Specifies whether you want to iterate over\n the mappings sorted by the generated file's line/column order or the\n original's source/line/column order, respectively. Defaults to\n `SourceMapConsumer.GENERATED_ORDER`.\n\n### SourceMapGenerator\n\nAn instance of the SourceMapGenerator represents a source map which is being\nbuilt incrementally.\n\n#### new SourceMapGenerator([startOfSourceMap])\n\nYou may pass an object with the following properties:\n\n* `file`: The filename of the generated source that this source map is\n associated with.\n\n* `sourceRoot`: A root for all relative URLs in this source map.\n\n#### SourceMapGenerator.fromSourceMap(sourceMapConsumer)\n\nCreates a new SourceMapGenerator based on a SourceMapConsumer\n\n* `sourceMapConsumer` The SourceMap.\n\n#### SourceMapGenerator.prototype.addMapping(mapping)\n\nAdd a single mapping from original source line and column to the generated\nsource's line and column for this source map being created. The mapping object\nshould have the following properties:\n\n* `generated`: An object with the generated line and column positions.\n\n* `original`: An object with the original line and column positions.\n\n* `source`: The original source file (relative to the sourceRoot).\n\n* `name`: An optional original token name for this mapping.\n\n#### SourceMapGenerator.prototype.setSourceContent(sourceFile, sourceContent)\n\nSet the source content for an original source file.\n\n* `sourceFile` the URL of the original source file.\n\n* `sourceContent` the content of the source file.\n\n#### SourceMapGenerator.prototype.applySourceMap(sourceMapConsumer[, sourceFile[, sourceMapPath]])\n\nApplies a SourceMap for a source file to the SourceMap.\nEach mapping to the supplied source file is rewritten using the\nsupplied SourceMap. Note: The resolution for the resulting mappings\nis the minimium of this map and the supplied map.\n\n* `sourceMapConsumer`: The SourceMap to be applied.\n\n* `sourceFile`: Optional. The filename of the source file.\n If omitted, sourceMapConsumer.file will be used, if it exists.\n Otherwise an error will be thrown.\n\n* `sourceMapPath`: Optional. The dirname of the path to the SourceMap\n to be applied. If relative, it is relative to the SourceMap.\n\n This parameter is needed when the two SourceMaps aren't in the same\n directory, and the SourceMap to be applied contains relative source\n paths. If so, those relative source paths need to be rewritten\n relative to the SourceMap.\n\n If omitted, it is assumed that both SourceMaps are in the same directory,\n thus not needing any rewriting. (Supplying `'.'` has the same effect.)\n\n#### SourceMapGenerator.prototype.toString()\n\nRenders the source map being generated to a string.\n\n### SourceNode\n\nSourceNodes provide a way to abstract over interpolating and/or concatenating\nsnippets of generated JavaScript source code, while maintaining the line and\ncolumn information associated between those snippets and the original source\ncode. This is useful as the final intermediate representation a compiler might\nuse before outputting the generated JS and source map.\n\n#### new SourceNode([line, column, source[, chunk[, name]]])\n\n* `line`: The original line number associated with this source node, or null if\n it isn't associated with an original line.\n\n* `column`: The original column number associated with this source node, or null\n if it isn't associated with an original column.\n\n* `source`: The original source's filename; null if no filename is provided.\n\n* `chunk`: Optional. Is immediately passed to `SourceNode.prototype.add`, see\n below.\n\n* `name`: Optional. The original identifier.\n\n#### SourceNode.fromStringWithSourceMap(code, sourceMapConsumer)\n\nCreates a SourceNode from generated code and a SourceMapConsumer.\n\n* `code`: The generated code\n\n* `sourceMapConsumer` The SourceMap for the generated code\n\n#### SourceNode.prototype.add(chunk)\n\nAdd a chunk of generated JS to this source node.\n\n* `chunk`: A string snippet of generated JS code, another instance of\n `SourceNode`, or an array where each member is one of those things.\n\n#### SourceNode.prototype.prepend(chunk)\n\nPrepend a chunk of generated JS to this source node.\n\n* `chunk`: A string snippet of generated JS code, another instance of\n `SourceNode`, or an array where each member is one of those things.\n\n#### SourceNode.prototype.setSourceContent(sourceFile, sourceContent)\n\nSet the source content for a source file. This will be added to the\n`SourceMap` in the `sourcesContent` field.\n\n* `sourceFile`: The filename of the source file\n\n* `sourceContent`: The content of the source file\n\n#### SourceNode.prototype.walk(fn)\n\nWalk over the tree of JS snippets in this node and its children. The walking\nfunction is called once for each snippet of JS and is passed that snippet and\nthe its original associated source's line/column location.\n\n* `fn`: The traversal function.\n\n#### SourceNode.prototype.walkSourceContents(fn)\n\nWalk over the tree of SourceNodes. The walking function is called for each\nsource file content and is passed the filename and source content.\n\n* `fn`: The traversal function.\n\n#### SourceNode.prototype.join(sep)\n\nLike `Array.prototype.join` except for SourceNodes. Inserts the separator\nbetween each of this source node's children.\n\n* `sep`: The separator.\n\n#### SourceNode.prototype.replaceRight(pattern, replacement)\n\nCall `String.prototype.replace` on the very right-most source snippet. Useful\nfor trimming whitespace from the end of a source node, etc.\n\n* `pattern`: The pattern to replace.\n\n* `replacement`: The thing to replace the pattern with.\n\n#### SourceNode.prototype.toString()\n\nReturn the string representation of this source node. Walks over the tree and\nconcatenates all the various snippets together to one string.\n\n### SourceNode.prototype.toStringWithSourceMap([startOfSourceMap])\n\nReturns the string representation of this tree of source nodes, plus a\nSourceMapGenerator which contains all the mappings between the generated and\noriginal sources.\n\nThe arguments are the same as those to `new SourceMapGenerator`.\n\n## Tests\n\n[![Build Status](https://travis-ci.org/mozilla/source-map.png?branch=master)](https://travis-ci.org/mozilla/source-map)\n\nInstall NodeJS version 0.8.0 or greater, then run `node test/run-tests.js`.\n\nTo add new tests, create a new file named `test/test-<your new test name>.js`\nand export your test functions with names that start with \"test\", for example\n\n exports[\"test doing the foo bar\"] = function (assert, util) {\n ...\n };\n\nThe new test will be located automatically when you run the suite.\n\nThe `util` argument is the test utility module located at `test/source-map/util`.\n\nThe `assert` argument is a cut down version of node's assert module. You have\naccess to the following assertion functions:\n\n* `doesNotThrow`\n\n* `equal`\n\n* `ok`\n\n* `strictEqual`\n\n* `throws`\n\n(The reason for the restricted set of test functions is because we need the\ntests to run inside Firefox's test suite as well and so the assert module is\nshimmed in that environment. See `build/assert-shim.js`.)\n\n[format]: https://docs.google.com/document/d/1U1RGAehQwRypUTovF1KRlpiOFze0b-_2gc6fAH0KY0k/edit\n[feature]: https://wiki.mozilla.org/DevTools/Features/SourceMap\n[Dryice]: https://github.com/mozilla/dryice\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/mozilla/source-map/issues" + }, + "_id": "source-map@0.1.33", + "_from": "source-map@*" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/run-tests.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/run-tests.js new file mode 100755 index 00000000..64a7c3a3 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/run-tests.js @@ -0,0 +1,62 @@ +#!/usr/bin/env node +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +var assert = require('assert'); +var fs = require('fs'); +var path = require('path'); +var util = require('./source-map/util'); + +function run(tests) { + var total = 0; + var passed = 0; + + for (var i = 0; i < tests.length; i++) { + for (var k in tests[i].testCase) { + if (/^test/.test(k)) { + total++; + try { + tests[i].testCase[k](assert, util); + passed++; + } + catch (e) { + console.log('FAILED ' + tests[i].name + ': ' + k + '!'); + console.log(e.stack); + } + } + } + } + + console.log(''); + console.log(passed + ' / ' + total + ' tests passed.'); + console.log(''); + + return total - passed; +} + +function isTestFile(f) { + var testToRun = process.argv[2]; + return testToRun + ? path.basename(testToRun) === f + : /^test\-.*?\.js/.test(f); +} + +function toModule(f) { + return './source-map/' + f.replace(/\.js$/, ''); +} + +var requires = fs.readdirSync(path.join(__dirname, 'source-map')) + .filter(isTestFile) + .map(toModule); + +var code = run(requires.map(require).map(function (mod, i) { + return { + name: requires[i], + testCase: mod + }; +})); + +process.exit(code); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-api.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-api.js new file mode 100644 index 00000000..3801233c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-api.js @@ -0,0 +1,26 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2012 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var sourceMap; + try { + sourceMap = require('../../lib/source-map'); + } catch (e) { + sourceMap = {}; + Components.utils.import('resource:///modules/devtools/SourceMap.jsm', sourceMap); + } + + exports['test that the api is properly exposed in the top level'] = function (assert, util) { + assert.equal(typeof sourceMap.SourceMapGenerator, "function"); + assert.equal(typeof sourceMap.SourceMapConsumer, "function"); + assert.equal(typeof sourceMap.SourceNode, "function"); + }; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-array-set.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-array-set.js new file mode 100644 index 00000000..b5797edd --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-array-set.js @@ -0,0 +1,104 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var ArraySet = require('../../lib/source-map/array-set').ArraySet; + + function makeTestSet() { + var set = new ArraySet(); + for (var i = 0; i < 100; i++) { + set.add(String(i)); + } + return set; + } + + exports['test .has() membership'] = function (assert, util) { + var set = makeTestSet(); + for (var i = 0; i < 100; i++) { + assert.ok(set.has(String(i))); + } + }; + + exports['test .indexOf() elements'] = function (assert, util) { + var set = makeTestSet(); + for (var i = 0; i < 100; i++) { + assert.strictEqual(set.indexOf(String(i)), i); + } + }; + + exports['test .at() indexing'] = function (assert, util) { + var set = makeTestSet(); + for (var i = 0; i < 100; i++) { + assert.strictEqual(set.at(i), String(i)); + } + }; + + exports['test creating from an array'] = function (assert, util) { + var set = ArraySet.fromArray(['foo', 'bar', 'baz', 'quux', 'hasOwnProperty']); + + assert.ok(set.has('foo')); + assert.ok(set.has('bar')); + assert.ok(set.has('baz')); + assert.ok(set.has('quux')); + assert.ok(set.has('hasOwnProperty')); + + assert.strictEqual(set.indexOf('foo'), 0); + assert.strictEqual(set.indexOf('bar'), 1); + assert.strictEqual(set.indexOf('baz'), 2); + assert.strictEqual(set.indexOf('quux'), 3); + + assert.strictEqual(set.at(0), 'foo'); + assert.strictEqual(set.at(1), 'bar'); + assert.strictEqual(set.at(2), 'baz'); + assert.strictEqual(set.at(3), 'quux'); + }; + + exports['test that you can add __proto__; see github issue #30'] = function (assert, util) { + var set = new ArraySet(); + set.add('__proto__'); + assert.ok(set.has('__proto__')); + assert.strictEqual(set.at(0), '__proto__'); + assert.strictEqual(set.indexOf('__proto__'), 0); + }; + + exports['test .fromArray() with duplicates'] = function (assert, util) { + var set = ArraySet.fromArray(['foo', 'foo']); + assert.ok(set.has('foo')); + assert.strictEqual(set.at(0), 'foo'); + assert.strictEqual(set.indexOf('foo'), 0); + assert.strictEqual(set.toArray().length, 1); + + set = ArraySet.fromArray(['foo', 'foo'], true); + assert.ok(set.has('foo')); + assert.strictEqual(set.at(0), 'foo'); + assert.strictEqual(set.at(1), 'foo'); + assert.strictEqual(set.indexOf('foo'), 0); + assert.strictEqual(set.toArray().length, 2); + }; + + exports['test .add() with duplicates'] = function (assert, util) { + var set = new ArraySet(); + set.add('foo'); + + set.add('foo'); + assert.ok(set.has('foo')); + assert.strictEqual(set.at(0), 'foo'); + assert.strictEqual(set.indexOf('foo'), 0); + assert.strictEqual(set.toArray().length, 1); + + set.add('foo', true); + assert.ok(set.has('foo')); + assert.strictEqual(set.at(0), 'foo'); + assert.strictEqual(set.at(1), 'foo'); + assert.strictEqual(set.indexOf('foo'), 0); + assert.strictEqual(set.toArray().length, 2); + }; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-base64-vlq.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-base64-vlq.js new file mode 100644 index 00000000..653a874e --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-base64-vlq.js @@ -0,0 +1,24 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var base64VLQ = require('../../lib/source-map/base64-vlq'); + + exports['test normal encoding and decoding'] = function (assert, util) { + var result; + for (var i = -255; i < 256; i++) { + result = base64VLQ.decode(base64VLQ.encode(i)); + assert.ok(result); + assert.equal(result.value, i); + assert.equal(result.rest, ""); + } + }; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-base64.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-base64.js new file mode 100644 index 00000000..ff3a2445 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-base64.js @@ -0,0 +1,35 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var base64 = require('../../lib/source-map/base64'); + + exports['test out of range encoding'] = function (assert, util) { + assert.throws(function () { + base64.encode(-1); + }); + assert.throws(function () { + base64.encode(64); + }); + }; + + exports['test out of range decoding'] = function (assert, util) { + assert.throws(function () { + base64.decode('='); + }); + }; + + exports['test normal encoding and decoding'] = function (assert, util) { + for (var i = 0; i < 64; i++) { + assert.equal(base64.decode(base64.encode(i)), i); + } + }; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-binary-search.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-binary-search.js new file mode 100644 index 00000000..ee306830 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-binary-search.js @@ -0,0 +1,54 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var binarySearch = require('../../lib/source-map/binary-search'); + + function numberCompare(a, b) { + return a - b; + } + + exports['test too high'] = function (assert, util) { + var needle = 30; + var haystack = [2,4,6,8,10,12,14,16,18,20]; + + assert.doesNotThrow(function () { + binarySearch.search(needle, haystack, numberCompare); + }); + + assert.equal(binarySearch.search(needle, haystack, numberCompare), 20); + }; + + exports['test too low'] = function (assert, util) { + var needle = 1; + var haystack = [2,4,6,8,10,12,14,16,18,20]; + + assert.doesNotThrow(function () { + binarySearch.search(needle, haystack, numberCompare); + }); + + assert.equal(binarySearch.search(needle, haystack, numberCompare), null); + }; + + exports['test exact search'] = function (assert, util) { + var needle = 4; + var haystack = [2,4,6,8,10,12,14,16,18,20]; + + assert.equal(binarySearch.search(needle, haystack, numberCompare), 4); + }; + + exports['test fuzzy search'] = function (assert, util) { + var needle = 19; + var haystack = [2,4,6,8,10,12,14,16,18,20]; + + assert.equal(binarySearch.search(needle, haystack, numberCompare), 18); + }; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-dog-fooding.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-dog-fooding.js new file mode 100644 index 00000000..26757b2d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-dog-fooding.js @@ -0,0 +1,84 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer; + var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator; + + exports['test eating our own dog food'] = function (assert, util) { + var smg = new SourceMapGenerator({ + file: 'testing.js', + sourceRoot: '/wu/tang' + }); + + smg.addMapping({ + source: 'gza.coffee', + original: { line: 1, column: 0 }, + generated: { line: 2, column: 2 } + }); + + smg.addMapping({ + source: 'gza.coffee', + original: { line: 2, column: 0 }, + generated: { line: 3, column: 2 } + }); + + smg.addMapping({ + source: 'gza.coffee', + original: { line: 3, column: 0 }, + generated: { line: 4, column: 2 } + }); + + smg.addMapping({ + source: 'gza.coffee', + original: { line: 4, column: 0 }, + generated: { line: 5, column: 2 } + }); + + smg.addMapping({ + source: 'gza.coffee', + original: { line: 5, column: 10 }, + generated: { line: 6, column: 12 } + }); + + var smc = new SourceMapConsumer(smg.toString()); + + // Exact + util.assertMapping(2, 2, '/wu/tang/gza.coffee', 1, 0, null, smc, assert); + util.assertMapping(3, 2, '/wu/tang/gza.coffee', 2, 0, null, smc, assert); + util.assertMapping(4, 2, '/wu/tang/gza.coffee', 3, 0, null, smc, assert); + util.assertMapping(5, 2, '/wu/tang/gza.coffee', 4, 0, null, smc, assert); + util.assertMapping(6, 12, '/wu/tang/gza.coffee', 5, 10, null, smc, assert); + + // Fuzzy + + // Generated to original + util.assertMapping(2, 0, null, null, null, null, smc, assert, true); + util.assertMapping(2, 9, '/wu/tang/gza.coffee', 1, 0, null, smc, assert, true); + util.assertMapping(3, 0, null, null, null, null, smc, assert, true); + util.assertMapping(3, 9, '/wu/tang/gza.coffee', 2, 0, null, smc, assert, true); + util.assertMapping(4, 0, null, null, null, null, smc, assert, true); + util.assertMapping(4, 9, '/wu/tang/gza.coffee', 3, 0, null, smc, assert, true); + util.assertMapping(5, 0, null, null, null, null, smc, assert, true); + util.assertMapping(5, 9, '/wu/tang/gza.coffee', 4, 0, null, smc, assert, true); + util.assertMapping(6, 0, null, null, null, null, smc, assert, true); + util.assertMapping(6, 9, null, null, null, null, smc, assert, true); + util.assertMapping(6, 13, '/wu/tang/gza.coffee', 5, 10, null, smc, assert, true); + + // Original to generated + util.assertMapping(2, 2, '/wu/tang/gza.coffee', 1, 1, null, smc, assert, null, true); + util.assertMapping(3, 2, '/wu/tang/gza.coffee', 2, 3, null, smc, assert, null, true); + util.assertMapping(4, 2, '/wu/tang/gza.coffee', 3, 6, null, smc, assert, null, true); + util.assertMapping(5, 2, '/wu/tang/gza.coffee', 4, 9, null, smc, assert, null, true); + util.assertMapping(5, 2, '/wu/tang/gza.coffee', 5, 9, null, smc, assert, null, true); + util.assertMapping(6, 12, '/wu/tang/gza.coffee', 6, 19, null, smc, assert, null, true); + }; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-consumer.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-consumer.js new file mode 100644 index 00000000..acd24d5e --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-consumer.js @@ -0,0 +1,475 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer; + var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator; + + exports['test that we can instantiate with a string or an object'] = function (assert, util) { + assert.doesNotThrow(function () { + var map = new SourceMapConsumer(util.testMap); + }); + assert.doesNotThrow(function () { + var map = new SourceMapConsumer(JSON.stringify(util.testMap)); + }); + }; + + exports['test that the `sources` field has the original sources'] = function (assert, util) { + var map = new SourceMapConsumer(util.testMap); + var sources = map.sources; + + assert.equal(sources[0], '/the/root/one.js'); + assert.equal(sources[1], '/the/root/two.js'); + assert.equal(sources.length, 2); + }; + + exports['test that the source root is reflected in a mapping\'s source field'] = function (assert, util) { + var map = new SourceMapConsumer(util.testMap); + var mapping; + + mapping = map.originalPositionFor({ + line: 2, + column: 1 + }); + assert.equal(mapping.source, '/the/root/two.js'); + + mapping = map.originalPositionFor({ + line: 1, + column: 1 + }); + assert.equal(mapping.source, '/the/root/one.js'); + }; + + exports['test mapping tokens back exactly'] = function (assert, util) { + var map = new SourceMapConsumer(util.testMap); + + util.assertMapping(1, 1, '/the/root/one.js', 1, 1, null, map, assert); + util.assertMapping(1, 5, '/the/root/one.js', 1, 5, null, map, assert); + util.assertMapping(1, 9, '/the/root/one.js', 1, 11, null, map, assert); + util.assertMapping(1, 18, '/the/root/one.js', 1, 21, 'bar', map, assert); + util.assertMapping(1, 21, '/the/root/one.js', 2, 3, null, map, assert); + util.assertMapping(1, 28, '/the/root/one.js', 2, 10, 'baz', map, assert); + util.assertMapping(1, 32, '/the/root/one.js', 2, 14, 'bar', map, assert); + + util.assertMapping(2, 1, '/the/root/two.js', 1, 1, null, map, assert); + util.assertMapping(2, 5, '/the/root/two.js', 1, 5, null, map, assert); + util.assertMapping(2, 9, '/the/root/two.js', 1, 11, null, map, assert); + util.assertMapping(2, 18, '/the/root/two.js', 1, 21, 'n', map, assert); + util.assertMapping(2, 21, '/the/root/two.js', 2, 3, null, map, assert); + util.assertMapping(2, 28, '/the/root/two.js', 2, 10, 'n', map, assert); + }; + + exports['test mapping tokens fuzzy'] = function (assert, util) { + var map = new SourceMapConsumer(util.testMap); + + // Finding original positions + util.assertMapping(1, 20, '/the/root/one.js', 1, 21, 'bar', map, assert, true); + util.assertMapping(1, 30, '/the/root/one.js', 2, 10, 'baz', map, assert, true); + util.assertMapping(2, 12, '/the/root/two.js', 1, 11, null, map, assert, true); + + // Finding generated positions + util.assertMapping(1, 18, '/the/root/one.js', 1, 22, 'bar', map, assert, null, true); + util.assertMapping(1, 28, '/the/root/one.js', 2, 13, 'baz', map, assert, null, true); + util.assertMapping(2, 9, '/the/root/two.js', 1, 16, null, map, assert, null, true); + }; + + exports['test mappings and end of lines'] = function (assert, util) { + var smg = new SourceMapGenerator({ + file: 'foo.js' + }); + smg.addMapping({ + original: { line: 1, column: 1 }, + generated: { line: 1, column: 1 }, + source: 'bar.js' + }); + smg.addMapping({ + original: { line: 2, column: 2 }, + generated: { line: 2, column: 2 }, + source: 'bar.js' + }); + + var map = SourceMapConsumer.fromSourceMap(smg); + + // When finding original positions, mappings end at the end of the line. + util.assertMapping(2, 1, null, null, null, null, map, assert, true) + + // When finding generated positions, mappings do not end at the end of the line. + util.assertMapping(1, 1, 'bar.js', 2, 1, null, map, assert, null, true); + }; + + exports['test creating source map consumers with )]}\' prefix'] = function (assert, util) { + assert.doesNotThrow(function () { + var map = new SourceMapConsumer(")]}'" + JSON.stringify(util.testMap)); + }); + }; + + exports['test eachMapping'] = function (assert, util) { + var map = new SourceMapConsumer(util.testMap); + var previousLine = -Infinity; + var previousColumn = -Infinity; + map.eachMapping(function (mapping) { + assert.ok(mapping.generatedLine >= previousLine); + + if (mapping.source) { + assert.equal(mapping.source.indexOf(util.testMap.sourceRoot), 0); + } + + if (mapping.generatedLine === previousLine) { + assert.ok(mapping.generatedColumn >= previousColumn); + previousColumn = mapping.generatedColumn; + } + else { + previousLine = mapping.generatedLine; + previousColumn = -Infinity; + } + }); + }; + + exports['test iterating over mappings in a different order'] = function (assert, util) { + var map = new SourceMapConsumer(util.testMap); + var previousLine = -Infinity; + var previousColumn = -Infinity; + var previousSource = ""; + map.eachMapping(function (mapping) { + assert.ok(mapping.source >= previousSource); + + if (mapping.source === previousSource) { + assert.ok(mapping.originalLine >= previousLine); + + if (mapping.originalLine === previousLine) { + assert.ok(mapping.originalColumn >= previousColumn); + previousColumn = mapping.originalColumn; + } + else { + previousLine = mapping.originalLine; + previousColumn = -Infinity; + } + } + else { + previousSource = mapping.source; + previousLine = -Infinity; + previousColumn = -Infinity; + } + }, null, SourceMapConsumer.ORIGINAL_ORDER); + }; + + exports['test that we can set the context for `this` in eachMapping'] = function (assert, util) { + var map = new SourceMapConsumer(util.testMap); + var context = {}; + map.eachMapping(function () { + assert.equal(this, context); + }, context); + }; + + exports['test that the `sourcesContent` field has the original sources'] = function (assert, util) { + var map = new SourceMapConsumer(util.testMapWithSourcesContent); + var sourcesContent = map.sourcesContent; + + assert.equal(sourcesContent[0], ' ONE.foo = function (bar) {\n return baz(bar);\n };'); + assert.equal(sourcesContent[1], ' TWO.inc = function (n) {\n return n + 1;\n };'); + assert.equal(sourcesContent.length, 2); + }; + + exports['test that we can get the original sources for the sources'] = function (assert, util) { + var map = new SourceMapConsumer(util.testMapWithSourcesContent); + var sources = map.sources; + + assert.equal(map.sourceContentFor(sources[0]), ' ONE.foo = function (bar) {\n return baz(bar);\n };'); + assert.equal(map.sourceContentFor(sources[1]), ' TWO.inc = function (n) {\n return n + 1;\n };'); + assert.equal(map.sourceContentFor("one.js"), ' ONE.foo = function (bar) {\n return baz(bar);\n };'); + assert.equal(map.sourceContentFor("two.js"), ' TWO.inc = function (n) {\n return n + 1;\n };'); + assert.throws(function () { + map.sourceContentFor(""); + }, Error); + assert.throws(function () { + map.sourceContentFor("/the/root/three.js"); + }, Error); + assert.throws(function () { + map.sourceContentFor("three.js"); + }, Error); + }; + + exports['test sourceRoot + generatedPositionFor'] = function (assert, util) { + var map = new SourceMapGenerator({ + sourceRoot: 'foo/bar', + file: 'baz.js' + }); + map.addMapping({ + original: { line: 1, column: 1 }, + generated: { line: 2, column: 2 }, + source: 'bang.coffee' + }); + map.addMapping({ + original: { line: 5, column: 5 }, + generated: { line: 6, column: 6 }, + source: 'bang.coffee' + }); + map = new SourceMapConsumer(map.toString()); + + // Should handle without sourceRoot. + var pos = map.generatedPositionFor({ + line: 1, + column: 1, + source: 'bang.coffee' + }); + + assert.equal(pos.line, 2); + assert.equal(pos.column, 2); + + // Should handle with sourceRoot. + var pos = map.generatedPositionFor({ + line: 1, + column: 1, + source: 'foo/bar/bang.coffee' + }); + + assert.equal(pos.line, 2); + assert.equal(pos.column, 2); + }; + + exports['test sourceRoot + originalPositionFor'] = function (assert, util) { + var map = new SourceMapGenerator({ + sourceRoot: 'foo/bar', + file: 'baz.js' + }); + map.addMapping({ + original: { line: 1, column: 1 }, + generated: { line: 2, column: 2 }, + source: 'bang.coffee' + }); + map = new SourceMapConsumer(map.toString()); + + var pos = map.originalPositionFor({ + line: 2, + column: 2, + }); + + // Should always have the prepended source root + assert.equal(pos.source, 'foo/bar/bang.coffee'); + assert.equal(pos.line, 1); + assert.equal(pos.column, 1); + }; + + exports['test github issue #56'] = function (assert, util) { + var map = new SourceMapGenerator({ + sourceRoot: 'http://', + file: 'www.example.com/foo.js' + }); + map.addMapping({ + original: { line: 1, column: 1 }, + generated: { line: 2, column: 2 }, + source: 'www.example.com/original.js' + }); + map = new SourceMapConsumer(map.toString()); + + var sources = map.sources; + assert.equal(sources.length, 1); + assert.equal(sources[0], 'http://www.example.com/original.js'); + }; + + exports['test github issue #43'] = function (assert, util) { + var map = new SourceMapGenerator({ + sourceRoot: 'http://example.com', + file: 'foo.js' + }); + map.addMapping({ + original: { line: 1, column: 1 }, + generated: { line: 2, column: 2 }, + source: 'http://cdn.example.com/original.js' + }); + map = new SourceMapConsumer(map.toString()); + + var sources = map.sources; + assert.equal(sources.length, 1, + 'Should only be one source.'); + assert.equal(sources[0], 'http://cdn.example.com/original.js', + 'Should not be joined with the sourceRoot.'); + }; + + exports['test absolute path, but same host sources'] = function (assert, util) { + var map = new SourceMapGenerator({ + sourceRoot: 'http://example.com/foo/bar', + file: 'foo.js' + }); + map.addMapping({ + original: { line: 1, column: 1 }, + generated: { line: 2, column: 2 }, + source: '/original.js' + }); + map = new SourceMapConsumer(map.toString()); + + var sources = map.sources; + assert.equal(sources.length, 1, + 'Should only be one source.'); + assert.equal(sources[0], 'http://example.com/original.js', + 'Source should be relative the host of the source root.'); + }; + + exports['test github issue #64'] = function (assert, util) { + var map = new SourceMapConsumer({ + "version": 3, + "file": "foo.js", + "sourceRoot": "http://example.com/", + "sources": ["/a"], + "names": [], + "mappings": "AACA", + "sourcesContent": ["foo"] + }); + + assert.equal(map.sourceContentFor("a"), "foo"); + assert.equal(map.sourceContentFor("/a"), "foo"); + }; + + exports['test bug 885597'] = function (assert, util) { + var map = new SourceMapConsumer({ + "version": 3, + "file": "foo.js", + "sourceRoot": "file:///Users/AlGore/Invented/The/Internet/", + "sources": ["/a"], + "names": [], + "mappings": "AACA", + "sourcesContent": ["foo"] + }); + + var s = map.sources[0]; + assert.equal(map.sourceContentFor(s), "foo"); + }; + + exports['test github issue #72, duplicate sources'] = function (assert, util) { + var map = new SourceMapConsumer({ + "version": 3, + "file": "foo.js", + "sources": ["source1.js", "source1.js", "source3.js"], + "names": [], + "mappings": ";EAAC;;IAEE;;MEEE", + "sourceRoot": "http://example.com" + }); + + var pos = map.originalPositionFor({ + line: 2, + column: 2 + }); + assert.equal(pos.source, 'http://example.com/source1.js'); + assert.equal(pos.line, 1); + assert.equal(pos.column, 1); + + var pos = map.originalPositionFor({ + line: 4, + column: 4 + }); + assert.equal(pos.source, 'http://example.com/source1.js'); + assert.equal(pos.line, 3); + assert.equal(pos.column, 3); + + var pos = map.originalPositionFor({ + line: 6, + column: 6 + }); + assert.equal(pos.source, 'http://example.com/source3.js'); + assert.equal(pos.line, 5); + assert.equal(pos.column, 5); + }; + + exports['test github issue #72, duplicate names'] = function (assert, util) { + var map = new SourceMapConsumer({ + "version": 3, + "file": "foo.js", + "sources": ["source.js"], + "names": ["name1", "name1", "name3"], + "mappings": ";EAACA;;IAEEA;;MAEEE", + "sourceRoot": "http://example.com" + }); + + var pos = map.originalPositionFor({ + line: 2, + column: 2 + }); + assert.equal(pos.name, 'name1'); + assert.equal(pos.line, 1); + assert.equal(pos.column, 1); + + var pos = map.originalPositionFor({ + line: 4, + column: 4 + }); + assert.equal(pos.name, 'name1'); + assert.equal(pos.line, 3); + assert.equal(pos.column, 3); + + var pos = map.originalPositionFor({ + line: 6, + column: 6 + }); + assert.equal(pos.name, 'name3'); + assert.equal(pos.line, 5); + assert.equal(pos.column, 5); + }; + + exports['test SourceMapConsumer.fromSourceMap'] = function (assert, util) { + var smg = new SourceMapGenerator({ + sourceRoot: 'http://example.com/', + file: 'foo.js' + }); + smg.addMapping({ + original: { line: 1, column: 1 }, + generated: { line: 2, column: 2 }, + source: 'bar.js' + }); + smg.addMapping({ + original: { line: 2, column: 2 }, + generated: { line: 4, column: 4 }, + source: 'baz.js', + name: 'dirtMcGirt' + }); + smg.setSourceContent('baz.js', 'baz.js content'); + + var smc = SourceMapConsumer.fromSourceMap(smg); + assert.equal(smc.file, 'foo.js'); + assert.equal(smc.sourceRoot, 'http://example.com/'); + assert.equal(smc.sources.length, 2); + assert.equal(smc.sources[0], 'http://example.com/bar.js'); + assert.equal(smc.sources[1], 'http://example.com/baz.js'); + assert.equal(smc.sourceContentFor('baz.js'), 'baz.js content'); + + var pos = smc.originalPositionFor({ + line: 2, + column: 2 + }); + assert.equal(pos.line, 1); + assert.equal(pos.column, 1); + assert.equal(pos.source, 'http://example.com/bar.js'); + assert.equal(pos.name, null); + + pos = smc.generatedPositionFor({ + line: 1, + column: 1, + source: 'http://example.com/bar.js' + }); + assert.equal(pos.line, 2); + assert.equal(pos.column, 2); + + pos = smc.originalPositionFor({ + line: 4, + column: 4 + }); + assert.equal(pos.line, 2); + assert.equal(pos.column, 2); + assert.equal(pos.source, 'http://example.com/baz.js'); + assert.equal(pos.name, 'dirtMcGirt'); + + pos = smc.generatedPositionFor({ + line: 2, + column: 2, + source: 'http://example.com/baz.js' + }); + assert.equal(pos.line, 4); + assert.equal(pos.column, 4); + }; +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-generator.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-generator.js new file mode 100644 index 00000000..16241dd3 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-map-generator.js @@ -0,0 +1,540 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator; + var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer; + var SourceNode = require('../../lib/source-map/source-node').SourceNode; + var util = require('./util'); + + exports['test some simple stuff'] = function (assert, util) { + var map = new SourceMapGenerator({ + file: 'foo.js', + sourceRoot: '.' + }); + assert.ok(true); + + var map = new SourceMapGenerator(); + assert.ok(true); + }; + + exports['test JSON serialization'] = function (assert, util) { + var map = new SourceMapGenerator({ + file: 'foo.js', + sourceRoot: '.' + }); + assert.equal(map.toString(), JSON.stringify(map)); + }; + + exports['test adding mappings (case 1)'] = function (assert, util) { + var map = new SourceMapGenerator({ + file: 'generated-foo.js', + sourceRoot: '.' + }); + + assert.doesNotThrow(function () { + map.addMapping({ + generated: { line: 1, column: 1 } + }); + }); + }; + + exports['test adding mappings (case 2)'] = function (assert, util) { + var map = new SourceMapGenerator({ + file: 'generated-foo.js', + sourceRoot: '.' + }); + + assert.doesNotThrow(function () { + map.addMapping({ + generated: { line: 1, column: 1 }, + source: 'bar.js', + original: { line: 1, column: 1 } + }); + }); + }; + + exports['test adding mappings (case 3)'] = function (assert, util) { + var map = new SourceMapGenerator({ + file: 'generated-foo.js', + sourceRoot: '.' + }); + + assert.doesNotThrow(function () { + map.addMapping({ + generated: { line: 1, column: 1 }, + source: 'bar.js', + original: { line: 1, column: 1 }, + name: 'someToken' + }); + }); + }; + + exports['test adding mappings (invalid)'] = function (assert, util) { + var map = new SourceMapGenerator({ + file: 'generated-foo.js', + sourceRoot: '.' + }); + + // Not enough info. + assert.throws(function () { + map.addMapping({}); + }); + + // Original file position, but no source. + assert.throws(function () { + map.addMapping({ + generated: { line: 1, column: 1 }, + original: { line: 1, column: 1 } + }); + }); + }; + + exports['test that the correct mappings are being generated'] = function (assert, util) { + var map = new SourceMapGenerator({ + file: 'min.js', + sourceRoot: '/the/root' + }); + + map.addMapping({ + generated: { line: 1, column: 1 }, + original: { line: 1, column: 1 }, + source: 'one.js' + }); + map.addMapping({ + generated: { line: 1, column: 5 }, + original: { line: 1, column: 5 }, + source: 'one.js' + }); + map.addMapping({ + generated: { line: 1, column: 9 }, + original: { line: 1, column: 11 }, + source: 'one.js' + }); + map.addMapping({ + generated: { line: 1, column: 18 }, + original: { line: 1, column: 21 }, + source: 'one.js', + name: 'bar' + }); + map.addMapping({ + generated: { line: 1, column: 21 }, + original: { line: 2, column: 3 }, + source: 'one.js' + }); + map.addMapping({ + generated: { line: 1, column: 28 }, + original: { line: 2, column: 10 }, + source: 'one.js', + name: 'baz' + }); + map.addMapping({ + generated: { line: 1, column: 32 }, + original: { line: 2, column: 14 }, + source: 'one.js', + name: 'bar' + }); + + map.addMapping({ + generated: { line: 2, column: 1 }, + original: { line: 1, column: 1 }, + source: 'two.js' + }); + map.addMapping({ + generated: { line: 2, column: 5 }, + original: { line: 1, column: 5 }, + source: 'two.js' + }); + map.addMapping({ + generated: { line: 2, column: 9 }, + original: { line: 1, column: 11 }, + source: 'two.js' + }); + map.addMapping({ + generated: { line: 2, column: 18 }, + original: { line: 1, column: 21 }, + source: 'two.js', + name: 'n' + }); + map.addMapping({ + generated: { line: 2, column: 21 }, + original: { line: 2, column: 3 }, + source: 'two.js' + }); + map.addMapping({ + generated: { line: 2, column: 28 }, + original: { line: 2, column: 10 }, + source: 'two.js', + name: 'n' + }); + + map = JSON.parse(map.toString()); + + util.assertEqualMaps(assert, map, util.testMap); + }; + + exports['test that source content can be set'] = function (assert, util) { + var map = new SourceMapGenerator({ + file: 'min.js', + sourceRoot: '/the/root' + }); + map.addMapping({ + generated: { line: 1, column: 1 }, + original: { line: 1, column: 1 }, + source: 'one.js' + }); + map.addMapping({ + generated: { line: 2, column: 1 }, + original: { line: 1, column: 1 }, + source: 'two.js' + }); + map.setSourceContent('one.js', 'one file content'); + + map = JSON.parse(map.toString()); + assert.equal(map.sources[0], 'one.js'); + assert.equal(map.sources[1], 'two.js'); + assert.equal(map.sourcesContent[0], 'one file content'); + assert.equal(map.sourcesContent[1], null); + }; + + exports['test .fromSourceMap'] = function (assert, util) { + var map = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(util.testMap)); + util.assertEqualMaps(assert, map.toJSON(), util.testMap); + }; + + exports['test .fromSourceMap with sourcesContent'] = function (assert, util) { + var map = SourceMapGenerator.fromSourceMap( + new SourceMapConsumer(util.testMapWithSourcesContent)); + util.assertEqualMaps(assert, map.toJSON(), util.testMapWithSourcesContent); + }; + + exports['test applySourceMap'] = function (assert, util) { + var node = new SourceNode(null, null, null, [ + new SourceNode(2, 0, 'fileX', 'lineX2\n'), + 'genA1\n', + new SourceNode(2, 0, 'fileY', 'lineY2\n'), + 'genA2\n', + new SourceNode(1, 0, 'fileX', 'lineX1\n'), + 'genA3\n', + new SourceNode(1, 0, 'fileY', 'lineY1\n') + ]); + var mapStep1 = node.toStringWithSourceMap({ + file: 'fileA' + }).map; + mapStep1.setSourceContent('fileX', 'lineX1\nlineX2\n'); + mapStep1 = mapStep1.toJSON(); + + node = new SourceNode(null, null, null, [ + 'gen1\n', + new SourceNode(1, 0, 'fileA', 'lineA1\n'), + new SourceNode(2, 0, 'fileA', 'lineA2\n'), + new SourceNode(3, 0, 'fileA', 'lineA3\n'), + new SourceNode(4, 0, 'fileA', 'lineA4\n'), + new SourceNode(1, 0, 'fileB', 'lineB1\n'), + new SourceNode(2, 0, 'fileB', 'lineB2\n'), + 'gen2\n' + ]); + var mapStep2 = node.toStringWithSourceMap({ + file: 'fileGen' + }).map; + mapStep2.setSourceContent('fileB', 'lineB1\nlineB2\n'); + mapStep2 = mapStep2.toJSON(); + + node = new SourceNode(null, null, null, [ + 'gen1\n', + new SourceNode(2, 0, 'fileX', 'lineA1\n'), + new SourceNode(2, 0, 'fileA', 'lineA2\n'), + new SourceNode(2, 0, 'fileY', 'lineA3\n'), + new SourceNode(4, 0, 'fileA', 'lineA4\n'), + new SourceNode(1, 0, 'fileB', 'lineB1\n'), + new SourceNode(2, 0, 'fileB', 'lineB2\n'), + 'gen2\n' + ]); + var expectedMap = node.toStringWithSourceMap({ + file: 'fileGen' + }).map; + expectedMap.setSourceContent('fileX', 'lineX1\nlineX2\n'); + expectedMap.setSourceContent('fileB', 'lineB1\nlineB2\n'); + expectedMap = expectedMap.toJSON(); + + // apply source map "mapStep1" to "mapStep2" + var generator = SourceMapGenerator.fromSourceMap(new SourceMapConsumer(mapStep2)); + generator.applySourceMap(new SourceMapConsumer(mapStep1)); + var actualMap = generator.toJSON(); + + util.assertEqualMaps(assert, actualMap, expectedMap); + }; + + exports['test applySourceMap throws when file is missing'] = function (assert, util) { + var map = new SourceMapGenerator({ + file: 'test.js' + }); + var map2 = new SourceMapGenerator(); + assert.throws(function() { + map.applySourceMap(new SourceMapConsumer(map2.toJSON())); + }); + }; + + exports['test the two additional parameters of applySourceMap'] = function (assert, util) { + // Assume the following directory structure: + // + // http://foo.org/ + // bar.coffee + // app/ + // coffee/ + // foo.coffee + // temp/ + // bundle.js + // temp_maps/ + // bundle.js.map + // public/ + // bundle.min.js + // bundle.min.js.map + // + // http://www.example.com/ + // baz.coffee + + var bundleMap = new SourceMapGenerator({ + file: 'bundle.js' + }); + bundleMap.addMapping({ + generated: { line: 3, column: 3 }, + original: { line: 2, column: 2 }, + source: '../coffee/foo.coffee' + }); + bundleMap.addMapping({ + generated: { line: 13, column: 13 }, + original: { line: 12, column: 12 }, + source: '/bar.coffee' + }); + bundleMap.addMapping({ + generated: { line: 23, column: 23 }, + original: { line: 22, column: 22 }, + source: 'http://www.example.com/baz.coffee' + }); + bundleMap = new SourceMapConsumer(bundleMap.toJSON()); + + var minifiedMap = new SourceMapGenerator({ + file: 'bundle.min.js', + sourceRoot: '..' + }); + minifiedMap.addMapping({ + generated: { line: 1, column: 1 }, + original: { line: 3, column: 3 }, + source: 'temp/bundle.js' + }); + minifiedMap.addMapping({ + generated: { line: 11, column: 11 }, + original: { line: 13, column: 13 }, + source: 'temp/bundle.js' + }); + minifiedMap.addMapping({ + generated: { line: 21, column: 21 }, + original: { line: 23, column: 23 }, + source: 'temp/bundle.js' + }); + minifiedMap = new SourceMapConsumer(minifiedMap.toJSON()); + + var expectedMap = function (sources) { + var map = new SourceMapGenerator({ + file: 'bundle.min.js', + sourceRoot: '..' + }); + map.addMapping({ + generated: { line: 1, column: 1 }, + original: { line: 2, column: 2 }, + source: sources[0] + }); + map.addMapping({ + generated: { line: 11, column: 11 }, + original: { line: 12, column: 12 }, + source: sources[1] + }); + map.addMapping({ + generated: { line: 21, column: 21 }, + original: { line: 22, column: 22 }, + source: sources[2] + }); + return map.toJSON(); + } + + var actualMap = function (aSourceMapPath) { + var map = SourceMapGenerator.fromSourceMap(minifiedMap); + // Note that relying on `bundleMap.file` (which is simply 'bundle.js') + // instead of supplying the second parameter wouldn't work here. + map.applySourceMap(bundleMap, '../temp/bundle.js', aSourceMapPath); + return map.toJSON(); + } + + util.assertEqualMaps(assert, actualMap('../temp_maps'), expectedMap([ + 'coffee/foo.coffee', + '/bar.coffee', + 'http://www.example.com/baz.coffee' + ])); + + util.assertEqualMaps(assert, actualMap('/app/temp_maps'), expectedMap([ + '/app/coffee/foo.coffee', + '/bar.coffee', + 'http://www.example.com/baz.coffee' + ])); + + util.assertEqualMaps(assert, actualMap('http://foo.org/app/temp_maps'), expectedMap([ + 'http://foo.org/app/coffee/foo.coffee', + 'http://foo.org/bar.coffee', + 'http://www.example.com/baz.coffee' + ])); + }; + + exports['test sorting with duplicate generated mappings'] = function (assert, util) { + var map = new SourceMapGenerator({ + file: 'test.js' + }); + map.addMapping({ + generated: { line: 3, column: 0 }, + original: { line: 2, column: 0 }, + source: 'a.js' + }); + map.addMapping({ + generated: { line: 2, column: 0 } + }); + map.addMapping({ + generated: { line: 2, column: 0 } + }); + map.addMapping({ + generated: { line: 1, column: 0 }, + original: { line: 1, column: 0 }, + source: 'a.js' + }); + + util.assertEqualMaps(assert, map.toJSON(), { + version: 3, + file: 'test.js', + sources: ['a.js'], + names: [], + mappings: 'AAAA;A;AACA' + }); + }; + + exports['test ignore duplicate mappings.'] = function (assert, util) { + var init = { file: 'min.js', sourceRoot: '/the/root' }; + var map1, map2; + + // null original source location + var nullMapping1 = { + generated: { line: 1, column: 0 } + }; + var nullMapping2 = { + generated: { line: 2, column: 2 } + }; + + map1 = new SourceMapGenerator(init); + map2 = new SourceMapGenerator(init); + + map1.addMapping(nullMapping1); + map1.addMapping(nullMapping1); + + map2.addMapping(nullMapping1); + + util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON()); + + map1.addMapping(nullMapping2); + map1.addMapping(nullMapping1); + + map2.addMapping(nullMapping2); + + util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON()); + + // original source location + var srcMapping1 = { + generated: { line: 1, column: 0 }, + original: { line: 11, column: 0 }, + source: 'srcMapping1.js' + }; + var srcMapping2 = { + generated: { line: 2, column: 2 }, + original: { line: 11, column: 0 }, + source: 'srcMapping2.js' + }; + + map1 = new SourceMapGenerator(init); + map2 = new SourceMapGenerator(init); + + map1.addMapping(srcMapping1); + map1.addMapping(srcMapping1); + + map2.addMapping(srcMapping1); + + util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON()); + + map1.addMapping(srcMapping2); + map1.addMapping(srcMapping1); + + map2.addMapping(srcMapping2); + + util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON()); + + // full original source and name information + var fullMapping1 = { + generated: { line: 1, column: 0 }, + original: { line: 11, column: 0 }, + source: 'fullMapping1.js', + name: 'fullMapping1' + }; + var fullMapping2 = { + generated: { line: 2, column: 2 }, + original: { line: 11, column: 0 }, + source: 'fullMapping2.js', + name: 'fullMapping2' + }; + + map1 = new SourceMapGenerator(init); + map2 = new SourceMapGenerator(init); + + map1.addMapping(fullMapping1); + map1.addMapping(fullMapping1); + + map2.addMapping(fullMapping1); + + util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON()); + + map1.addMapping(fullMapping2); + map1.addMapping(fullMapping1); + + map2.addMapping(fullMapping2); + + util.assertEqualMaps(assert, map1.toJSON(), map2.toJSON()); + }; + + exports['test github issue #72, check for duplicate names or sources'] = function (assert, util) { + var map = new SourceMapGenerator({ + file: 'test.js' + }); + map.addMapping({ + generated: { line: 1, column: 1 }, + original: { line: 2, column: 2 }, + source: 'a.js', + name: 'foo' + }); + map.addMapping({ + generated: { line: 3, column: 3 }, + original: { line: 4, column: 4 }, + source: 'a.js', + name: 'foo' + }); + util.assertEqualMaps(assert, map.toJSON(), { + version: 3, + file: 'test.js', + sources: ['a.js'], + names: ['foo'], + mappings: 'CACEA;;GAEEA' + }); + }; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-node.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-node.js new file mode 100644 index 00000000..e7afc4e7 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-source-node.js @@ -0,0 +1,439 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var SourceMapGenerator = require('../../lib/source-map/source-map-generator').SourceMapGenerator; + var SourceMapConsumer = require('../../lib/source-map/source-map-consumer').SourceMapConsumer; + var SourceNode = require('../../lib/source-map/source-node').SourceNode; + + exports['test .add()'] = function (assert, util) { + var node = new SourceNode(null, null, null); + + // Adding a string works. + node.add('function noop() {}'); + + // Adding another source node works. + node.add(new SourceNode(null, null, null)); + + // Adding an array works. + node.add(['function foo() {', + new SourceNode(null, null, null, + 'return 10;'), + '}']); + + // Adding other stuff doesn't. + assert.throws(function () { + node.add({}); + }); + assert.throws(function () { + node.add(function () {}); + }); + }; + + exports['test .prepend()'] = function (assert, util) { + var node = new SourceNode(null, null, null); + + // Prepending a string works. + node.prepend('function noop() {}'); + assert.equal(node.children[0], 'function noop() {}'); + assert.equal(node.children.length, 1); + + // Prepending another source node works. + node.prepend(new SourceNode(null, null, null)); + assert.equal(node.children[0], ''); + assert.equal(node.children[1], 'function noop() {}'); + assert.equal(node.children.length, 2); + + // Prepending an array works. + node.prepend(['function foo() {', + new SourceNode(null, null, null, + 'return 10;'), + '}']); + assert.equal(node.children[0], 'function foo() {'); + assert.equal(node.children[1], 'return 10;'); + assert.equal(node.children[2], '}'); + assert.equal(node.children[3], ''); + assert.equal(node.children[4], 'function noop() {}'); + assert.equal(node.children.length, 5); + + // Prepending other stuff doesn't. + assert.throws(function () { + node.prepend({}); + }); + assert.throws(function () { + node.prepend(function () {}); + }); + }; + + exports['test .toString()'] = function (assert, util) { + assert.equal((new SourceNode(null, null, null, + ['function foo() {', + new SourceNode(null, null, null, 'return 10;'), + '}'])).toString(), + 'function foo() {return 10;}'); + }; + + exports['test .join()'] = function (assert, util) { + assert.equal((new SourceNode(null, null, null, + ['a', 'b', 'c', 'd'])).join(', ').toString(), + 'a, b, c, d'); + }; + + exports['test .walk()'] = function (assert, util) { + var node = new SourceNode(null, null, null, + ['(function () {\n', + ' ', new SourceNode(1, 0, 'a.js', ['someCall()']), ';\n', + ' ', new SourceNode(2, 0, 'b.js', ['if (foo) bar()']), ';\n', + '}());']); + var expected = [ + { str: '(function () {\n', source: null, line: null, column: null }, + { str: ' ', source: null, line: null, column: null }, + { str: 'someCall()', source: 'a.js', line: 1, column: 0 }, + { str: ';\n', source: null, line: null, column: null }, + { str: ' ', source: null, line: null, column: null }, + { str: 'if (foo) bar()', source: 'b.js', line: 2, column: 0 }, + { str: ';\n', source: null, line: null, column: null }, + { str: '}());', source: null, line: null, column: null }, + ]; + var i = 0; + node.walk(function (chunk, loc) { + assert.equal(expected[i].str, chunk); + assert.equal(expected[i].source, loc.source); + assert.equal(expected[i].line, loc.line); + assert.equal(expected[i].column, loc.column); + i++; + }); + }; + + exports['test .replaceRight'] = function (assert, util) { + var node; + + // Not nested + node = new SourceNode(null, null, null, 'hello world'); + node.replaceRight(/world/, 'universe'); + assert.equal(node.toString(), 'hello universe'); + + // Nested + node = new SourceNode(null, null, null, + [new SourceNode(null, null, null, 'hey sexy mama, '), + new SourceNode(null, null, null, 'want to kill all humans?')]); + node.replaceRight(/kill all humans/, 'watch Futurama'); + assert.equal(node.toString(), 'hey sexy mama, want to watch Futurama?'); + }; + + exports['test .toStringWithSourceMap()'] = function (assert, util) { + var node = new SourceNode(null, null, null, + ['(function () {\n', + ' ', + new SourceNode(1, 0, 'a.js', 'someCall', 'originalCall'), + new SourceNode(1, 8, 'a.js', '()'), + ';\n', + ' ', new SourceNode(2, 0, 'b.js', ['if (foo) bar()']), ';\n', + '}());']); + var map = node.toStringWithSourceMap({ + file: 'foo.js' + }).map; + var mapWithoutOptions = node.toStringWithSourceMap().map; + + assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator'); + assert.ok(mapWithoutOptions instanceof SourceMapGenerator, 'mapWithoutOptions instanceof SourceMapGenerator'); + mapWithoutOptions._file = 'foo.js'; + util.assertEqualMaps(assert, map.toJSON(), mapWithoutOptions.toJSON()); + + map = new SourceMapConsumer(map.toString()); + + var actual; + + actual = map.originalPositionFor({ + line: 1, + column: 4 + }); + assert.equal(actual.source, null); + assert.equal(actual.line, null); + assert.equal(actual.column, null); + + actual = map.originalPositionFor({ + line: 2, + column: 2 + }); + assert.equal(actual.source, 'a.js'); + assert.equal(actual.line, 1); + assert.equal(actual.column, 0); + assert.equal(actual.name, 'originalCall'); + + actual = map.originalPositionFor({ + line: 3, + column: 2 + }); + assert.equal(actual.source, 'b.js'); + assert.equal(actual.line, 2); + assert.equal(actual.column, 0); + + actual = map.originalPositionFor({ + line: 3, + column: 16 + }); + assert.equal(actual.source, null); + assert.equal(actual.line, null); + assert.equal(actual.column, null); + + actual = map.originalPositionFor({ + line: 4, + column: 2 + }); + assert.equal(actual.source, null); + assert.equal(actual.line, null); + assert.equal(actual.column, null); + }; + + exports['test .fromStringWithSourceMap()'] = function (assert, util) { + var node = SourceNode.fromStringWithSourceMap( + util.testGeneratedCode, + new SourceMapConsumer(util.testMap)); + + var result = node.toStringWithSourceMap({ + file: 'min.js' + }); + var map = result.map; + var code = result.code; + + assert.equal(code, util.testGeneratedCode); + assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator'); + map = map.toJSON(); + assert.equal(map.version, util.testMap.version); + assert.equal(map.file, util.testMap.file); + assert.equal(map.mappings, util.testMap.mappings); + }; + + exports['test .fromStringWithSourceMap() empty map'] = function (assert, util) { + var node = SourceNode.fromStringWithSourceMap( + util.testGeneratedCode, + new SourceMapConsumer(util.emptyMap)); + var result = node.toStringWithSourceMap({ + file: 'min.js' + }); + var map = result.map; + var code = result.code; + + assert.equal(code, util.testGeneratedCode); + assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator'); + map = map.toJSON(); + assert.equal(map.version, util.emptyMap.version); + assert.equal(map.file, util.emptyMap.file); + assert.equal(map.mappings.length, util.emptyMap.mappings.length); + assert.equal(map.mappings, util.emptyMap.mappings); + }; + + exports['test .fromStringWithSourceMap() complex version'] = function (assert, util) { + var input = new SourceNode(null, null, null, [ + "(function() {\n", + " var Test = {};\n", + " ", new SourceNode(1, 0, "a.js", "Test.A = { value: 1234 };\n"), + " ", new SourceNode(2, 0, "a.js", "Test.A.x = 'xyz';"), "\n", + "}());\n", + "/* Generated Source */"]); + input = input.toStringWithSourceMap({ + file: 'foo.js' + }); + + var node = SourceNode.fromStringWithSourceMap( + input.code, + new SourceMapConsumer(input.map.toString())); + + var result = node.toStringWithSourceMap({ + file: 'foo.js' + }); + var map = result.map; + var code = result.code; + + assert.equal(code, input.code); + assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator'); + map = map.toJSON(); + var inputMap = input.map.toJSON(); + util.assertEqualMaps(assert, map, inputMap); + }; + + exports['test .toStringWithSourceMap() merging duplicate mappings'] = function (assert, util) { + var input = new SourceNode(null, null, null, [ + new SourceNode(1, 0, "a.js", "(function"), + new SourceNode(1, 0, "a.js", "() {\n"), + " ", + new SourceNode(1, 0, "a.js", "var Test = "), + new SourceNode(1, 0, "b.js", "{};\n"), + new SourceNode(2, 0, "b.js", "Test"), + new SourceNode(2, 0, "b.js", ".A", "A"), + new SourceNode(2, 20, "b.js", " = { value: ", "A"), + "1234", + new SourceNode(2, 40, "b.js", " };\n", "A"), + "}());\n", + "/* Generated Source */" + ]); + input = input.toStringWithSourceMap({ + file: 'foo.js' + }); + + var correctMap = new SourceMapGenerator({ + file: 'foo.js' + }); + correctMap.addMapping({ + generated: { line: 1, column: 0 }, + source: 'a.js', + original: { line: 1, column: 0 } + }); + // Here is no need for a empty mapping, + // because mappings ends at eol + correctMap.addMapping({ + generated: { line: 2, column: 2 }, + source: 'a.js', + original: { line: 1, column: 0 } + }); + correctMap.addMapping({ + generated: { line: 2, column: 13 }, + source: 'b.js', + original: { line: 1, column: 0 } + }); + correctMap.addMapping({ + generated: { line: 3, column: 0 }, + source: 'b.js', + original: { line: 2, column: 0 } + }); + correctMap.addMapping({ + generated: { line: 3, column: 4 }, + source: 'b.js', + name: 'A', + original: { line: 2, column: 0 } + }); + correctMap.addMapping({ + generated: { line: 3, column: 6 }, + source: 'b.js', + name: 'A', + original: { line: 2, column: 20 } + }); + // This empty mapping is required, + // because there is a hole in the middle of the line + correctMap.addMapping({ + generated: { line: 3, column: 18 } + }); + correctMap.addMapping({ + generated: { line: 3, column: 22 }, + source: 'b.js', + name: 'A', + original: { line: 2, column: 40 } + }); + // Here is no need for a empty mapping, + // because mappings ends at eol + + var inputMap = input.map.toJSON(); + correctMap = correctMap.toJSON(); + util.assertEqualMaps(assert, inputMap, correctMap); + }; + + exports['test .toStringWithSourceMap() multi-line SourceNodes'] = function (assert, util) { + var input = new SourceNode(null, null, null, [ + new SourceNode(1, 0, "a.js", "(function() {\nvar nextLine = 1;\nanotherLine();\n"), + new SourceNode(2, 2, "b.js", "Test.call(this, 123);\n"), + new SourceNode(2, 2, "b.js", "this['stuff'] = 'v';\n"), + new SourceNode(2, 2, "b.js", "anotherLine();\n"), + "/*\nGenerated\nSource\n*/\n", + new SourceNode(3, 4, "c.js", "anotherLine();\n"), + "/*\nGenerated\nSource\n*/" + ]); + input = input.toStringWithSourceMap({ + file: 'foo.js' + }); + + var correctMap = new SourceMapGenerator({ + file: 'foo.js' + }); + correctMap.addMapping({ + generated: { line: 1, column: 0 }, + source: 'a.js', + original: { line: 1, column: 0 } + }); + correctMap.addMapping({ + generated: { line: 2, column: 0 }, + source: 'a.js', + original: { line: 1, column: 0 } + }); + correctMap.addMapping({ + generated: { line: 3, column: 0 }, + source: 'a.js', + original: { line: 1, column: 0 } + }); + correctMap.addMapping({ + generated: { line: 4, column: 0 }, + source: 'b.js', + original: { line: 2, column: 2 } + }); + correctMap.addMapping({ + generated: { line: 5, column: 0 }, + source: 'b.js', + original: { line: 2, column: 2 } + }); + correctMap.addMapping({ + generated: { line: 6, column: 0 }, + source: 'b.js', + original: { line: 2, column: 2 } + }); + correctMap.addMapping({ + generated: { line: 11, column: 0 }, + source: 'c.js', + original: { line: 3, column: 4 } + }); + + var inputMap = input.map.toJSON(); + correctMap = correctMap.toJSON(); + util.assertEqualMaps(assert, inputMap, correctMap); + }; + + exports['test setSourceContent with toStringWithSourceMap'] = function (assert, util) { + var aNode = new SourceNode(1, 1, 'a.js', 'a'); + aNode.setSourceContent('a.js', 'someContent'); + var node = new SourceNode(null, null, null, + ['(function () {\n', + ' ', aNode, + ' ', new SourceNode(1, 1, 'b.js', 'b'), + '}());']); + node.setSourceContent('b.js', 'otherContent'); + var map = node.toStringWithSourceMap({ + file: 'foo.js' + }).map; + + assert.ok(map instanceof SourceMapGenerator, 'map instanceof SourceMapGenerator'); + map = new SourceMapConsumer(map.toString()); + + assert.equal(map.sources.length, 2); + assert.equal(map.sources[0], 'a.js'); + assert.equal(map.sources[1], 'b.js'); + assert.equal(map.sourcesContent.length, 2); + assert.equal(map.sourcesContent[0], 'someContent'); + assert.equal(map.sourcesContent[1], 'otherContent'); + }; + + exports['test walkSourceContents'] = function (assert, util) { + var aNode = new SourceNode(1, 1, 'a.js', 'a'); + aNode.setSourceContent('a.js', 'someContent'); + var node = new SourceNode(null, null, null, + ['(function () {\n', + ' ', aNode, + ' ', new SourceNode(1, 1, 'b.js', 'b'), + '}());']); + node.setSourceContent('b.js', 'otherContent'); + var results = []; + node.walkSourceContents(function (sourceFile, sourceContent) { + results.push([sourceFile, sourceContent]); + }); + assert.equal(results.length, 2); + assert.equal(results[0][0], 'a.js'); + assert.equal(results[0][1], 'someContent'); + assert.equal(results[1][0], 'b.js'); + assert.equal(results[1][1], 'otherContent'); + }; +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-util.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-util.js new file mode 100644 index 00000000..22e9a9e3 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/test-util.js @@ -0,0 +1,127 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2014 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var libUtil = require('../../lib/source-map/util'); + + exports['test urls'] = function (assert, util) { + var assertUrl = function (url) { + assert.equal(url, libUtil.urlGenerate(libUtil.urlParse(url))); + }; + assertUrl('http://'); + assertUrl('http://www.example.com'); + assertUrl('http://user:pass@www.example.com'); + assertUrl('http://www.example.com:80'); + assertUrl('http://www.example.com/'); + assertUrl('http://www.example.com/foo/bar'); + assertUrl('http://www.example.com/foo/bar/'); + assertUrl('http://user:pass@www.example.com:80/foo/bar/'); + + assertUrl('//'); + assertUrl('//www.example.com'); + assertUrl('file:///www.example.com'); + + assert.equal(libUtil.urlParse('a//b'), null); + }; + + exports['test normalize()'] = function (assert, util) { + assert.equal(libUtil.normalize('/..'), '/'); + assert.equal(libUtil.normalize('/../'), '/'); + assert.equal(libUtil.normalize('/../../../..'), '/'); + assert.equal(libUtil.normalize('/../../../../a/b/c'), '/a/b/c'); + assert.equal(libUtil.normalize('/a/b/c/../../../d/../../e'), '/e'); + + assert.equal(libUtil.normalize('..'), '..'); + assert.equal(libUtil.normalize('../'), '../'); + assert.equal(libUtil.normalize('../../a/'), '../../a/'); + assert.equal(libUtil.normalize('a/..'), '.'); + assert.equal(libUtil.normalize('a/../../..'), '../..'); + + assert.equal(libUtil.normalize('/.'), '/'); + assert.equal(libUtil.normalize('/./'), '/'); + assert.equal(libUtil.normalize('/./././.'), '/'); + assert.equal(libUtil.normalize('/././././a/b/c'), '/a/b/c'); + assert.equal(libUtil.normalize('/a/b/c/./././d/././e'), '/a/b/c/d/e'); + + assert.equal(libUtil.normalize('.'), '.'); + assert.equal(libUtil.normalize('./'), '.'); + assert.equal(libUtil.normalize('././a'), 'a'); + assert.equal(libUtil.normalize('a/./'), 'a/'); + assert.equal(libUtil.normalize('a/././.'), 'a'); + + assert.equal(libUtil.normalize('/a/b//c////d/////'), '/a/b/c/d/'); + assert.equal(libUtil.normalize('///a/b//c////d/////'), '///a/b/c/d/'); + assert.equal(libUtil.normalize('a/b//c////d'), 'a/b/c/d'); + + assert.equal(libUtil.normalize('.///.././../a/b//./..'), '../../a') + + assert.equal(libUtil.normalize('http://www.example.com'), 'http://www.example.com'); + assert.equal(libUtil.normalize('http://www.example.com/'), 'http://www.example.com/'); + assert.equal(libUtil.normalize('http://www.example.com/./..//a/b/c/.././d//'), 'http://www.example.com/a/b/d/'); + }; + + exports['test join()'] = function (assert, util) { + assert.equal(libUtil.join('a', 'b'), 'a/b'); + assert.equal(libUtil.join('a/', 'b'), 'a/b'); + assert.equal(libUtil.join('a//', 'b'), 'a/b'); + assert.equal(libUtil.join('a', 'b/'), 'a/b/'); + assert.equal(libUtil.join('a', 'b//'), 'a/b/'); + assert.equal(libUtil.join('a/', '/b'), '/b'); + assert.equal(libUtil.join('a//', '//b'), '//b'); + + assert.equal(libUtil.join('a', '..'), '.'); + assert.equal(libUtil.join('a', '../b'), 'b'); + assert.equal(libUtil.join('a/b', '../c'), 'a/c'); + + assert.equal(libUtil.join('a', '.'), 'a'); + assert.equal(libUtil.join('a', './b'), 'a/b'); + assert.equal(libUtil.join('a/b', './c'), 'a/b/c'); + + assert.equal(libUtil.join('a', 'http://www.example.com'), 'http://www.example.com'); + assert.equal(libUtil.join('a', 'data:foo,bar'), 'data:foo,bar'); + + + assert.equal(libUtil.join('http://foo.org/a', 'b'), 'http://foo.org/a/b'); + assert.equal(libUtil.join('http://foo.org/a/', 'b'), 'http://foo.org/a/b'); + assert.equal(libUtil.join('http://foo.org/a//', 'b'), 'http://foo.org/a/b'); + assert.equal(libUtil.join('http://foo.org/a', 'b/'), 'http://foo.org/a/b/'); + assert.equal(libUtil.join('http://foo.org/a', 'b//'), 'http://foo.org/a/b/'); + assert.equal(libUtil.join('http://foo.org/a/', '/b'), 'http://foo.org/b'); + assert.equal(libUtil.join('http://foo.org/a//', '//b'), 'http://b'); + + assert.equal(libUtil.join('http://foo.org/a', '..'), 'http://foo.org/'); + assert.equal(libUtil.join('http://foo.org/a', '../b'), 'http://foo.org/b'); + assert.equal(libUtil.join('http://foo.org/a/b', '../c'), 'http://foo.org/a/c'); + + assert.equal(libUtil.join('http://foo.org/a', '.'), 'http://foo.org/a'); + assert.equal(libUtil.join('http://foo.org/a', './b'), 'http://foo.org/a/b'); + assert.equal(libUtil.join('http://foo.org/a/b', './c'), 'http://foo.org/a/b/c'); + + assert.equal(libUtil.join('http://foo.org/a', 'http://www.example.com'), 'http://www.example.com'); + assert.equal(libUtil.join('http://foo.org/a', 'data:foo,bar'), 'data:foo,bar'); + + + assert.equal(libUtil.join('http://foo.org', 'a'), 'http://foo.org/a'); + assert.equal(libUtil.join('http://foo.org/', 'a'), 'http://foo.org/a'); + assert.equal(libUtil.join('http://foo.org//', 'a'), 'http://foo.org/a'); + assert.equal(libUtil.join('http://foo.org', '/a'), 'http://foo.org/a'); + assert.equal(libUtil.join('http://foo.org/', '/a'), 'http://foo.org/a'); + assert.equal(libUtil.join('http://foo.org//', '/a'), 'http://foo.org/a'); + + + assert.equal(libUtil.join('http://', 'www.example.com'), 'http://www.example.com'); + assert.equal(libUtil.join('file:///', 'www.example.com'), 'file:///www.example.com'); + assert.equal(libUtil.join('http://', 'ftp://example.com'), 'ftp://example.com'); + + assert.equal(libUtil.join('http://www.example.com', '//foo.org/bar'), 'http://foo.org/bar'); + assert.equal(libUtil.join('//www.example.com', '//foo.org/bar'), '//foo.org/bar'); + }; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/util.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/util.js new file mode 100644 index 00000000..288046bf --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/node_modules/source-map/test/source-map/util.js @@ -0,0 +1,161 @@ +/* -*- Mode: js; js-indent-level: 2; -*- */ +/* + * Copyright 2011 Mozilla Foundation and contributors + * Licensed under the New BSD license. See LICENSE or: + * http://opensource.org/licenses/BSD-3-Clause + */ +if (typeof define !== 'function') { + var define = require('amdefine')(module, require); +} +define(function (require, exports, module) { + + var util = require('../../lib/source-map/util'); + + // This is a test mapping which maps functions from two different files + // (one.js and two.js) to a minified generated source. + // + // Here is one.js: + // + // ONE.foo = function (bar) { + // return baz(bar); + // }; + // + // Here is two.js: + // + // TWO.inc = function (n) { + // return n + 1; + // }; + // + // And here is the generated code (min.js): + // + // ONE.foo=function(a){return baz(a);}; + // TWO.inc=function(a){return a+1;}; + exports.testGeneratedCode = " ONE.foo=function(a){return baz(a);};\n"+ + " TWO.inc=function(a){return a+1;};"; + exports.testMap = { + version: 3, + file: 'min.js', + names: ['bar', 'baz', 'n'], + sources: ['one.js', 'two.js'], + sourceRoot: '/the/root', + mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA' + }; + exports.testMapWithSourcesContent = { + version: 3, + file: 'min.js', + names: ['bar', 'baz', 'n'], + sources: ['one.js', 'two.js'], + sourcesContent: [ + ' ONE.foo = function (bar) {\n' + + ' return baz(bar);\n' + + ' };', + ' TWO.inc = function (n) {\n' + + ' return n + 1;\n' + + ' };' + ], + sourceRoot: '/the/root', + mappings: 'CAAC,IAAI,IAAM,SAAUA,GAClB,OAAOC,IAAID;CCDb,IAAI,IAAM,SAAUE,GAClB,OAAOA' + }; + exports.emptyMap = { + version: 3, + file: 'min.js', + names: [], + sources: [], + mappings: '' + }; + + + function assertMapping(generatedLine, generatedColumn, originalSource, + originalLine, originalColumn, name, map, assert, + dontTestGenerated, dontTestOriginal) { + if (!dontTestOriginal) { + var origMapping = map.originalPositionFor({ + line: generatedLine, + column: generatedColumn + }); + assert.equal(origMapping.name, name, + 'Incorrect name, expected ' + JSON.stringify(name) + + ', got ' + JSON.stringify(origMapping.name)); + assert.equal(origMapping.line, originalLine, + 'Incorrect line, expected ' + JSON.stringify(originalLine) + + ', got ' + JSON.stringify(origMapping.line)); + assert.equal(origMapping.column, originalColumn, + 'Incorrect column, expected ' + JSON.stringify(originalColumn) + + ', got ' + JSON.stringify(origMapping.column)); + + var expectedSource; + + if (originalSource && map.sourceRoot && originalSource.indexOf(map.sourceRoot) === 0) { + expectedSource = originalSource; + } else if (originalSource) { + expectedSource = map.sourceRoot + ? util.join(map.sourceRoot, originalSource) + : originalSource; + } else { + expectedSource = null; + } + + assert.equal(origMapping.source, expectedSource, + 'Incorrect source, expected ' + JSON.stringify(expectedSource) + + ', got ' + JSON.stringify(origMapping.source)); + } + + if (!dontTestGenerated) { + var genMapping = map.generatedPositionFor({ + source: originalSource, + line: originalLine, + column: originalColumn + }); + assert.equal(genMapping.line, generatedLine, + 'Incorrect line, expected ' + JSON.stringify(generatedLine) + + ', got ' + JSON.stringify(genMapping.line)); + assert.equal(genMapping.column, generatedColumn, + 'Incorrect column, expected ' + JSON.stringify(generatedColumn) + + ', got ' + JSON.stringify(genMapping.column)); + } + } + exports.assertMapping = assertMapping; + + function assertEqualMaps(assert, actualMap, expectedMap) { + assert.equal(actualMap.version, expectedMap.version, "version mismatch"); + assert.equal(actualMap.file, expectedMap.file, "file mismatch"); + assert.equal(actualMap.names.length, + expectedMap.names.length, + "names length mismatch: " + + actualMap.names.join(", ") + " != " + expectedMap.names.join(", ")); + for (var i = 0; i < actualMap.names.length; i++) { + assert.equal(actualMap.names[i], + expectedMap.names[i], + "names[" + i + "] mismatch: " + + actualMap.names.join(", ") + " != " + expectedMap.names.join(", ")); + } + assert.equal(actualMap.sources.length, + expectedMap.sources.length, + "sources length mismatch: " + + actualMap.sources.join(", ") + " != " + expectedMap.sources.join(", ")); + for (var i = 0; i < actualMap.sources.length; i++) { + assert.equal(actualMap.sources[i], + expectedMap.sources[i], + "sources[" + i + "] length mismatch: " + + actualMap.sources.join(", ") + " != " + expectedMap.sources.join(", ")); + } + assert.equal(actualMap.sourceRoot, + expectedMap.sourceRoot, + "sourceRoot mismatch: " + + actualMap.sourceRoot + " != " + expectedMap.sourceRoot); + assert.equal(actualMap.mappings, expectedMap.mappings, + "mappings mismatch:\nActual: " + actualMap.mappings + "\nExpected: " + expectedMap.mappings); + if (actualMap.sourcesContent) { + assert.equal(actualMap.sourcesContent.length, + expectedMap.sourcesContent.length, + "sourcesContent length mismatch"); + for (var i = 0; i < actualMap.sourcesContent.length; i++) { + assert.equal(actualMap.sourcesContent[i], + expectedMap.sourcesContent[i], + "sourcesContent[" + i + "] mismatch"); + } + } + } + exports.assertEqualMaps = assertEqualMaps; + +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/package.json b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/package.json new file mode 100644 index 00000000..10d9fd06 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/node_modules/postcss/package.json @@ -0,0 +1,40 @@ +{ + "name": "postcss", + "version": "0.2.0", + "description": "Framework for CSS postprocessors", + "keywords": [ + "css", + "parser", + "postproccessor" + ], + "author": { + "name": "Andrey Sitnik", + "email": "andrey@sitnik.ru" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/ai/postcss.git" + }, + "dependencies": { + "source-map": "*" + }, + "devDependencies": { + "coffee-script": "1.6.3", + "fs-extra": "0.8.1", + "should": "2.1.1", + "mocha": "1.15.1" + }, + "main": "lib/postcss", + "scripts": { + "test": "mocha" + }, + "readme": "# PostCSS\n\nPostCSS is a framework for CSS postprocessors,\nto modify CSS by your JS function.\n\nIt takes care of most common CSS tool tasks:\n\n1. parses CSS;\n2. gives you usable JS API to edit CSS node tree;\n3. saves modified node tree to new CSS;\n4. generates (or modifies existent) source map for your changes;\n\nYou can use this framework to write you own:\n\n* CSS minifier or beautifizer.\n* Grunt plugin to generate sprites, include `data-uri` images\n or any other works.\n* Text editor plugin to automate CSS routine.\n* Command-line CSS tool.\n\nSponsored by [Evil Martians](http://evilmartians.com/).\n\n## Build with PostCSS\n\n* [Autoprefixer](https://github.com/ai/autoprefixer)\n* [grunt-pixrem](https://github.com/robwierzbowski/grunt-pixrem)\n\n## Quick Example\n\nLet’s fix forgotten `content` property in `::before` and `::after`:\n\n```js\nvar postcss = require('postcss');\n\nvar contenter = postcss(function (css) {\n css.eachRule(function (rule) {\n if ( rule.selector.match(/::(before|after)/) ) {\n // In every ::before/::after rule\n\n // Did we forget content property?\n var good = rule.some(function (i) { return i.prop == 'content'; });\n\n if ( !good ) {\n // Add content: '' if we forget it\n rule.prepend({ prop: 'content', value: '\"\"' });\n }\n\n }\n });\n});\n```\n\nAnd then CSS with forgotten `content`:\n\n```css\na::before {\n width: 10px;\n height: 10px\n}\n```\n\nwill be fixed by our new `contenter`:\n\n```js\nvar fixed = contenter.process(css).css;\n```\n\nto:\n\n```css\na::before {\n content: \"\";\n width: 10px;\n height: 10px\n}\n```\n\n## Features\n\n### Source Map\n\nPostCSS generates source map for its transformations:\n\n```js\nresult = processor.process(css, { map: true, from: 'from.css', to: 'to.css' });\nresult.css // String with processed CSS\nresult.map // Source map\n```\n\nAnd modifies source map from previous step (like Sass preprocessor):\n\n```js\nvar sassMap = fs.readFileSync('from.sass.map');\nprocessor.process(css, { map: sassMap, from: 'from.sass.css', to: 'to.css' });\n```\n\n### Preserves code formatting and indentations\n\nPostCSS will not change any byte of rule if you don't modify node:\n\n```js\npostcss(function (css) { }).process(css).css == css;\n```\n\nAnd when you modify CSS nodes, PostCSS will try to copy coding style:\n\n```js\ncontenter.process(\"a::before{color: black}\")\n// a::before{content: '';color: black}\n\ncontenter.process(\"a::before {\\n color: black;\\n }\")\n// a::before {\n// content: '';\n// color: black;\n// }\n```\n\n## Why PostCSS Better Than …\n\n### Preprocessors\n\nPreprocessors (like Sass or Stylus) give us special language with variables,\nmixins, statements and compile it to CSS. Compass, nib and other mixins\nlibraries use this languages to work with prefixes, sprites and inline images.\n\nBut Sass and Stylus languages were created to be syntax-sugar for CSS.\nWriting really complicated programs using preporcessor languages is very difficult.\n[Autoprefixer] is absolutely impossible on Sass.\n\nPostCSS gives you comfort and power of JS or CoffeeScript to working with CSS.\nYou can do really magic things with wide range of [npm] libraries.\n\nBut postprocessors are not enemies for preprocessors. Sass and Stylus is still\nthe best way to improve readability and add some syntax sugar to CSS. You can easily combine preprocessors and postprocessors.\n\n[Autoprefixer]: https://github.com/ai/autoprefixer\n[npm]: https://npmjs.org/\n\n### RegExp\n\nSome Grunt plugins modify CSS with regular expressions. But CSS parser and\nnode tree are much safer way to edit CSS. Also regexps will break source maps\ngenerated by preprocessors.\n\n### CSS Parsers\n\nThere are a lot of good CSS parsers, like [Gonzales]. But they help you only\nwith first step.\n\nUnlike them PostCSS gives you useful high level API (for example,\nsafe iterators) and changes source map generator (or modifier for existing\nsource map from preprocessors).\n\n[Gonzales]: https://github.com/css/gonzales\n\n### Rework\n\n[Rework] was a first CSS postprocessors framework. PostCSS is very similar\nto it.\n\nBut Rework has no high level API and rewrite your CSS code style\nand indentations. So it can’t be used in text editor plugins.\n\nUnlike it PostCSS preserves all spaces and code formatting.\nIf you don't change rule, output will be byte‑to‑byte equal.\n\n[Rework]: https://github.com/visionmedia/rework\n\n## Usage\n\n### Processor\n\nFunction `postcss(fn)` creates processor by your function:\n\n```js\nvar postcss = require('postcss');\n\nvar processor = postcss(function (css) {\n // Code to modify CSS\n});\n```\n\nIf you want to combine multiple processors (and parse CSS only once),\nyou can create empty processor and add several functions by `use(fn)` method:\n\n```js\nvar all = postcss().\n use(prefixer).\n use(minifing);\n```\n\nProcessor function can just change current CSS node tree:\n\n```js\npostcss(function (css) {\n css.append( /* new rule */ )\n});\n```\n\nor create totally new CSS root and return it:\n\n```js\npostcss(function (css) {\n var newCSS = postcss.root()\n // Add rules and declarations\n return newCSS;\n});\n```\n\nProcessor will transform some CSS by `process(css, opts)` method:\n\n```js\nvar doubler = postcss(function (css) {\n // Clone each declaration\n css.eachDecl(function (decl) {\n decl.parent.prepend( decl.clone() );\n });\n});\n\nvar css = \"a { color: black; }\";\nvar result = processor.process(css);\n\nresult.css //=> \"a { color: black; color: black; }\"\n```\n\nYou can set original CSS filename by `from` options and make syntax error\nmessages much more helpful:\n\n```js\nvar wrong = \"a {\";\nprocessor.process(wrong, { from: 'main.css' });\n//=> Can't parse CSS: Unclosed block at line 1:1 in main.css\n```\n### Source Map\n\nPostCSS will generate source map, if you set `map` option to `true`\nin `process(css, opts)` method.\n\nYou must set input and output CSS files paths (by `from` and `to` options)\nto generate correct map.\n\n```js\nvar result = processor.process(css, {\n map: true,\n from: 'main.css',\n to: 'main.out.css'\n});\n\nresult.map //=> '{\"version\":3,\"file\":\"main.out.css\",\"sources\":[\"main.css\"],\"names\":[],\"mappings\":\"AAAA,KAAI\"}'\n\nfs.writeFileSync('main.out.map', result.map);\n```\n\nPostCSS can also modify previous source map (for example, from Sass\ncompilation). So, if you compile: Sass to CSS and then minify CSS\nby postprocessor, final source map will contain mapping from Sass code\nto minified CSS.\n\nJust set original source map content (as string or JS object)\nto `map` option:\n\n```js\nvar result = minifier.process(css, {\n map: fs.readFileSync('main.sass.map'),\n from: 'main.sass.css',\n to: 'main.min.css'\n});\n\nresult.map //=> Source map from main.sass to main.min.css\n```\n\n### Nodes\n\nProcessor function will receive `Root` node with CSS node tree inside.\n\n```js\nvar processor = postcss(function (cssRoot) {\n});\n```\n\nThere are 3 types of child nodes: `AtRule`, `Rule` and `Declaration`.\nAll nodes contain `toString()` and `clone()` methods.\n\nYou can parse CSS and get `Root` node by `postcss.parse(css, opts)` method:\n\n```js\nvar postcss = require('postcss');\n\nvar cssRoot = postcss.parse('a { }');\n```\n\n### Node Source\n\nEvery node stores it origin file (if you set `from` option to `process`\nor `parse` method) and position at `source` property:\n\n```\nvar root = postcss.parse(css, { from: 'main.css' });\nvar rule = root.rules[1];\n\nrule.source.file //=> 'main.css'\nrule.source.start //=> { line: 5, position: 1 }\nrule.source.end //=> { line: 10, position: 5 }\n```\n\n### Whitespaces\n\nAll nodes (exclude `Root`) have `before` property with all earlier spaces and comments.\n\nNodes with children (`Root`, `AtRule` and `Rule`) contain also `after` property\nwith spaces after last child and before `}` or end of file.\n\n```js\nvar root = postcss.parse(\"a {\\n color: black;\\n}\\n\");\n\nroot.after //=> \"\\n\" from end of file\nroot.rules[0].after //=> \"\\n\" before }\nroot.rules[0].decls[0].before //=> \"\\n \" before color: black\n```\n\nSo, the simplest way to minify CSS is to clean `before` and `after` properties:\n\n```js\nvar minifier = postcss(function (css) {\n css.eachDecl(function (decl) {\n decl.before = '';\n });\n css.eachRule(function (rule) {\n rule.before = '';\n rule.after = '';\n });\n css.eachAtRule(function (atRule) {\n atRule.before = '';\n atRule.after = '';\n });\n});\n\nvar css = \"a{\\n color:black\\n}\\n\";\nminifier.process(css).css //=> \"a{color:black}\"\n```\n\n### Raw Properties\n\nSome CSS values (like selectors, at-rule params and declaration values) can\ncontain comments. PostCSS will clean them for you:\n\n```js\nvar root = postcss.parse(\"a /**/ b {}\");\nvar ab = root.rules[0];\n\nab.selector //=> 'a b' trimmed and cleaned from comments\n```\n\nBut PostCSS saves raw content to stringify it to CSS, if you don’t\nset new value. As you can remember, PostCSS tries to save origin CSS\nbyte-to-byte, when it’s possible:\n\n```js\nab.toString() //=> 'a /**/ b {}' with comment\n\nab.selector = '.link b';\nab.toString() //=> '.link b' you change value and magic was gone\n```\n\n### Containers\n\n`Root`, `AtRule` and `Rule` nodes can contain children in `rules` or `decls`\nproperty.\n\nThere are common method to work with children:\n\n* `append(newChild)` to add child at the end of children list.\n* `prepend(newChild)` to add child at the beginning of children list.\n* `insertBefore(existsChild, newChild)` to insert new child before some\n existent children.\n* `insertAfter(existsChild, newChild)` to insert new child after some\n existent children.\n* `remove(child)` to remove child.\n* `index(child)` to return child index.\n* `some(fn)` to return true if `fn` return true on any child.\n* `every(fn)` to return true if `fn` return true on all children.\n\nMethods `insertBefore`, `insertAfter` and `remove` can receive child node\nor child index number as existent child argument.\nHave in mind that `index` works much faster.\n\n### Children\n\n`AtRule`, `Rule` and `Declaration` nodes should be wrapped in other nodes.\n\nAll children contain `parent` property with parent node:\n\n```js\nrule.decls[0].parent == rule;\n```\n\nAll children has `removeSelf()` method:\n\n```js\nrule.decls[0].removeSelf();\n```\n\nBut `remove(index)` in parent with child index is much faster:\n\n```js\nrule.each(function (decl, i) {\n rule.remove(i);\n});\n```\n\n### Iterators\n\nAll parent nodes have `each` method to iterate through children nodes:\n\n```js\nroot = postcss.parse('a { color: black; display: none }');\n\nroot.each(function (rule, i) {\n console.log(rule.selector, i); // Will log \"a 0\"\n});\n\nroot.rules[0].each(function (decl, i) {\n console.log(decl.prop, i); // Will log \"color 0\" and \"display 1\"\n});\n```\n\nInstead of simple `for` or `Array#forEach()` this iterator is safe.\nYou can change children inside iteration and it will fix current index:\n\n```js\nrule.rules.forEach(function (decl, i) {\n rule.prepend( decl.clone() );\n // Will be infinity cycle, because on prepend current declaration become\n // second and next index will go to current declaration again\n});\n\nrule.each(function (decl, i) {\n rule.prepend( decl.clone() );\n // Will work correct (once clone each declaration), because after prepend\n // iterator index will be recalculated\n});\n```\n\nBecause CSS is nested structure, PostCSS contains recursive iterator\nby node type:\n\n```js\nroot.eachDecl(function (decl, i) {\n // Each declaration inside root\n});\n\nroot.eachRule(function (rule, i) {\n // Each rule inside root and any nested at-rules\n});\n\nroot.eachAtRule(function (atRule, i) {\n // Each at-rule inside root and any nested at-rules\n});\n```\n\n### Root Node\n\n`Root` node contains all CSS tree. Its children can be only `AtRule` or `Rule`\nnodes in `rules` property.\n\nYou can create new root by shortcut:\n\n```js\nvar root = postcss.root();\n```\n\nMethod `toString()` will stringify all current CSS:\n\n```js\nroot = postcss.parse(css);\nroot.toString() == css;\n```\n\n### AtRule Node\n\n```css\n@charset 'utf-8';\n\n@font-face {\n font-family: 'Cool'\n}\n\n@media print {\n img { display: none }\n}\n```\n\n`AtRule` has two own properties: `name` and `params`.\n\nAs you see, some at-rules don’t contain any children (like `@charset`\nor `@import`), some of at-rules can contain only declarations\n(like `@font-face` or `@page`), but most of them can contain rules\nand nested at-rules (like `@media`, `@keyframes` and others).\n\nParser select `AtRule` content type by its name. If you create `AtRule`\nnode manually, it will detect own content type with new child type on first\n`append` or other add method call:\n\n```js\nvar atRule = postcss.atRule({ name: '-x-animations' });\natRule.rules //=> undefined\natRule.decls //=> undefined\n\natRule.append( postcss.rule({ selector: 'from' }) );\natRule.rules.length //=> 1\natRule.decls //=> undefined\n```\n\nYou can create new at-rule by shortcut:\n\n```js\nvar atRule = postcss.atRule({ name: 'charset', params: 'utf-8' });\n```\n\n### Rule Node\n\n```css\na {\n color: black;\n}\n```\n\n`Rule` node has `selector` property and contains `Declaration` children\nin `decls` property.\n\nYou can miss `Declaration` constructor in `append` and other insert methods:\n\n```js\nrule.append({ prop: 'color', value: 'black' });\n```\n\nProperty `semicolon` marks does last declaration in rule has semicolon or not:\n\n```js\nvar root = postcss.parse('a { color: black }');\nroot.rules[0].semicolon //=> false\n\nvar root = postcss.parse('a { color: black; }');\nroot.rules[0].semicolon //=> true\n```\n\nYou can create new rule by shortcut:\n\n```js\nvar rule = postcss.rule({ selector: 'a' });\n```\n\n### Declaration Node\n\n```css\ncolor: black\n```\n\n`Declaration` node has `prop` and `value` properties.\n\nYou can create new declaration by shortcut:\n\n```js\nvar decl = postcss.decl({ prop: 'color', value: 'black' });\n```\n\nOr use short form in `append()` and other add methods:\n\n```js\nrule.append({ prop: 'color', value: 'black' });\n```\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/ai/postcss/issues" + }, + "homepage": "https://github.com/ai/postcss", + "_id": "postcss@0.2.0", + "_from": "postcss@~0.2" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/package.json b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/package.json new file mode 100644 index 00000000..d8c453b3 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/package.json @@ -0,0 +1,47 @@ +{ + "name": "autoprefixer", + "version": "1.0.20140213", + "description": "Parse CSS and add vendor prefixes to CSS rules using values from the Can I Use website", + "keywords": [ + "css", + "prefix", + "postprocessor", + "postcss" + ], + "author": { + "name": "Andrey Sitnik", + "email": "andrey@sitnik.ru" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/ai/autoprefixer.git" + }, + "dependencies": { + "postcss": "~0.2", + "fs-extra": "~0.8.1" + }, + "devDependencies": { + "coffee-script": "1.7.1", + "browserify": "3.28.2", + "should": "3.1.2", + "stylus": "0.42.2", + "mocha": "1.17.1", + "nib": "1.0.2" + }, + "bin": { + "autoprefixer": "./bin/autoprefixer" + }, + "main": "lib/autoprefixer", + "scripts": { + "test": "mocha" + }, + "readme": "# Autoprefixer\n\n<img align=\"right\" width=\"94\" src=\"http://ai.github.io/autoprefixer/logo.svg\" title=\"Autoprefixer logo by Anton Lovchikov\">\n\nParse CSS and add vendor prefixes to CSS rules using values\nfrom the [Can I Use](http://caniuse.com/).\n\nWrite your CSS rules without vendor prefixes (in fact, forget about them\nentirely):\n\n```css\n:fullscreen a {\n transition: transform 1s\n}\n```\n\nProcess your CSS by Autoprefixer:\n\n```js\nvar prefixed = autoprefixer.process(css).css;\n```\n\nIt will use the data on current browser popularity and properties support\nto apply prefixes for you:\n\n```css\n:-webkit-full-screen a {\n -webkit-transition: -webkit-transform 1s;\n transition: transform 1s\n}\n:-moz-full-screen a {\n transition: transform 1s\n}\n:-ms-fullscreen a {\n transition: transform 1s\n}\n:fullscreen a {\n -webkit-transition: -webkit-transform 1s;\n transition: transform 1s\n}\n```\n\nYou can play with your CSS in [interactive demo] of Autoprefixer.\n\nTwitter account for news and releases: [@autoprefixer].\n\nSponsored by [Evil Martians]. Based on [PostCSS] framework.\n\n[interactive demo]: http://jsfiddle.net/simevidas/udyTs/show/light/\n[@autoprefixer]: https://twitter.com/autoprefixer\n[Evil Martians]: http://evilmartians.com/\n[PostCSS]: https://github.com/ai/postcss\n\n## Features\n\n### Forget about prefixes\n\nThe best tool is a tool you can't see and one that does the work for you.\nThis is the main idea behind Autoprefixer.\n\nAutoprefixer interface is simple: just forget about vendor prefixes\nand write normal CSS according to latest W3C specs. You don’t need\na special language (like Sass) or special mixins.\n\nBecause Autoprefixer is a postprocessor for CSS,\nyou can also use it with preprocessors, such as Sass, Stylus or LESS.\n\n### Actual data from Can I Use\n\nAutoprefixer uses the most recent data from [Can I Use](http://caniuse.com/),\nunderstands which browsers are actual and popular and adds only the necessary\nvendor prefixes.\n\nIt also cleans your CSS from old prefixes (like prefixed `border-radius`,\nproduced by many CSS libraries):\n\n```css\na {\n -webkit-border-radius: 5px;\n border-radius: 5px\n}\n```\n\ncompiles to:\n\n```css\na {\n border-radius: 5px\n}\n```\n\nNote, that Autoprefixer doesn’t load Can I Use data every time. This data\nis already packed to release, so with same Autoprefixer version you always will\nhave same output result.\n\n### Flexbox, Gradients, etc.\n\nFlexbox or gradients have different syntaxes in different browsers\n(sometimes you need to recalculate angles, sometimes you need 2 old properties\ninstead of new one), but Autoprefixer hides this from you.\n\nJust code by latest W3C specs and Autoprefixer will produce the code\nfor old browsers:\n\n```css\na {\n display: flex;\n}\n```\n\ncompiles to:\n\n```css\na {\n display: -webkit-box;\n display: -webkit-flex;\n display: -moz-box;\n display: -ms-flexbox;\n display: flex\n}\n```\n\nAutoprefixer has [22 special hacks] to fix browser’s differences.\n\n[22 special hacks]: https://github.com/ai/autoprefixer/tree/master/lib/hacks\n\n### Fast\n\nAutoprefixer is about 16 times faster than Compass and 8 times faster\nthan Stylus.\n\nOn a Core i7 with 10 GB of RAM and SSD, benchmark with GitHub styles is:\n\n```\n~/Dev/autoprefixer$ ./node_modules/.bin/cake bench\nLoad GitHub styles\nAutoprefixer: 489 ms\nCompass: 4156 ms (8.5 times slower)\nStylus: 4165 ms (8.5 times slower)\n```\n\nUnlike [-prefix-free](http://leaverou.github.io/prefixfree/), Autoprefixer\ncompiles CSS once on deploy and doesn’t hit client-side performance.\n\n## Browsers\n\nYou can specify the browsers you want to target in your project:\n\n```js\nautoprefixer(\"last 1 version\", \"> 1%\", \"Explorer 7\").process(css).css;\n```\n\n* `last 2 versions` is last versions for each browser. Like “last 2 versions”\n [strategy](http://support.google.com/a/bin/answer.py?answer=33864) in\n Google.\n* `last 2 Chrome versions` is last versions of specify browser.\n* `> 5%` is browser versions, selected by global usage statistics.\n* `Firefox > 20` is Firefox newer versions than 20.\n* `Firefox >= 20` is Firefox version 20 or newer.\n* `Firefix ESR` is latest [Firefox ESR] version.\n* `none` don’t set any browsers to clean CSS from any vendor prefixes.\n* You can also set browsers directly.\n\nBlackberry and stock Android browsers will not be used in `last n versions`.\nYou can add them by name:\n\n```js\nautoprefixer(\"last 1 version\", \"BlackBerry 10\", \"Android 4\").process(css).css;\n```\n\nBrowsers names (case insensitive):\n* `Android` for old Android stock browser.\n* `BlackBerry` or `bb` for Blackberry browser.\n* `Chrome` for Google Chrome.\n* `Firefox` or `ff` for Mozilla Firefox.\n* `Explorer` or `ie` for Internet Explorer.\n* `iOS` for iOS Safari.\n* `Opera` for Opera.\n* `Safari` for desktop Safari.\n\nBy default, Autoprefixer uses `> 1%, last 2 versions, Firefox ESR, Opera 12.1`:\n* Latest [Firefox ESR] is a 24 version.\n* Opera 12.1 will be in list until Opera supports non-Blink 12.x branch.\n\n[Firefox ESR]: http://www.mozilla.org/en/firefox/organizations/faq/\n\n## Source Map\n\nAutoprefixer will generate a source map if you set `map` option to `true`.\n\nYou must set input and output CSS files paths (by `from` and `to` options)\nto generate a correct map.\n\n```js\nvar result = autoprefixer.process(css, {\n map: true,\n from: 'main.css',\n to: 'main.out.css'\n});\n\nresult.css //=> Prefixed CSS\nresult.map //=> Source map content\n\nfs.writeFileSync('main.out.css.map', result.map);\n```\n\nAutoprefixer can also modify previous source map (for example, from Sass\ncompilation). Just set original source map content (as string or JS object)\nto `map` option:\n\n```js\nvar result = autoprefixer.process(css, {\n map: fs.readFileSync('main.sass.css.map'),\n from: 'main.sass.css',\n to: 'main.min.css'\n});\n\nresult.map //=> Source map from main.sass to main.min.css\n```\n\n## Debug\n\nYou can check which browsers are selected and which properties will be prefixed:\n\n```js\ninfo = autoprefixer(\"last 1 version\").info();\nconsole.log(info);\n```\n\nOr by CLI command:\n\n```sh\nautoprefixer -i\n```\n\n## FAQ\n\n### Does it add polyfills for old browsers?\n\nNo. Autoprefixer only adds prefixes, not polyfills. There are two reasons:\n\n1. Prefixes and polyfills are very different and need a different API.\n Two separate libraries would be much better.\n2. Most of IE polyfills are very bad for client perfomance. They use slow hacks\n and old IEs is mostly used on old hardware. Most of CSS 3 features that is\n only used for styling should be ignored in old IEs as it is recommended in\n Graceful Degradation.\n\n### Why don’t gradients work in Firefox?\n\nCheck that you use correct [direction syntax]. For example, you should use\n`to bottom` instead of `top`:\n\n```css\na {\n background: linear-gradient(to bottom, white, black)\n}\n```\n\nUnfortunately, unprefixed gradients use different direction syntax, that most\nof old gradients examples, so be careful and use always latest W3C specs with\nAutoprefixer.\n\n[direction syntax]: https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient\n\n### Why doesn’t Autoprefixer add prefixes to `border-radius`?\n\nDevelopers are often surprised by how few prefixes are required today.\nIf Autoprefixer doesn’t add prefixes to your CSS, check if they’re still\nrequired on [Can I Use](http://caniuse.com/).\n\nIf a prefix is required, but Autoprefixer doesn’t add it or adds it\nincorrectly, please\n[report an issue](https://github.com/ai/autoprefixer/issues/new)\nand include your source CSS and expected output.\n\n### Why doesn’t Autoprefixer support `appearance`?\n\nUnlike `transition`, the `appearance` property is not a part of\nany specification. So there is no `appearance`, only `-moz-appearance`\nand `-webkit-appearance`. Quote from [MDN](https://developer.mozilla.org/en-US/docs/Web/CSS/-moz-appearance):\n\n> Do not use this property on Web sites: not only is it non-standard, but its\n> behavior changes from one browser to another. Even the keyword `none` does not\n> have the same behavior on each form element across different browsers, and\n> some do not support it at all.\n\n## Usage\n\n### Grunt\n\nYou can use the\n[grunt-autoprefixer](https://github.com/nDmitry/grunt-autoprefixer)\nplugin for Grunt. Install the npm package and add it to Gruntfile:\n\n```js\ngrunt.loadNpmTasks('grunt-autoprefixer');\n```\n\n### Compass\n\nIf you use Compass binary to compile your styles, you can easily integrate\nAutoprefixer with it. Install `autoprefixer-rails` gem:\n\n```\ngem install autoprefixer-rails\n```\n\nand add post-compile hook to `config.rb`:\n\n```ruby\nrequire 'autoprefixer-rails'\nrequire 'csso'\n\non_stylesheet_saved do |file|\n css = File.read(file)\n File.open(file, 'w') do |io|\n io << AutoprefixerRails.process(css)\n end\nend\n```\n\nYou can set browsers array as second argument in `process` method:\n\n```ruby\nio << AutoprefixerRails.process(css, [\"last 1 version\", \"> 1%\", \"Explorer 7\"])\n```\n\n### Stylus\n\nIf you use Stylus CLI, you can add Autoprefixer by\n[autoprefixer-stylus](https://github.com/jenius/autoprefixer-stylus) plugin.\n\nJust install npm package and use it in `-u` option:\n\n```\nstylus -u autoprefixer-stylus file.css\n```\n\n### Ruby on Rails\n\nAdd [autoprefixer-rails](https://github.com/ai/autoprefixer-rails) gem\nto `Gemfile` and write CSS in a usual way:\n\n```ruby\ngem \"autoprefixer-rails\"\n```\n\n### Ruby\n\nYou can integrate Autoprefixer into your Sprockets environment\nby `autoprefixer-rails` gem:\n\n```ruby\nAutoprefixerRails.install(sprockets_env)\n```\n\nor process CSS from plain Ruby:\n\n```ruby\nprefixed = AutoprefixerRails.compile(css)\n```\n\n### Prepros\n\nIf you want to build your assets in GUI, try\n[Prepros](http://alphapixels.com/prepros/). Just set “Auto Prefix CSS”\n[checkbox](https://f.cloud.github.com/assets/3478693/930798/faa29892-0016-11e3-8901-87850de7aed2.jpg)\nin right panel.\n\n<img src=\"http://alphapixels.com/prepros/static/img/prepros.jpg\" width=\"550\" height=\"340\" />\n\n### Mincer\n\nTo use Autoprefixer in [Mincer](https://github.com/nodeca/mincer),\ninstall `autoprefixer` npm package and enable it:\n\n```js\nenvironment.enable('autoprefixer');\n```\n\n### Middleman\n\nAdd [middleman-autoprefixer](https://github.com/porada/middleman-autoprefixer)\ngem to `Gemfile`:\n\n```ruby\ngem \"middleman-autoprefixer\"\n```\n\nand activate the extension in your project’s `config.rb`:\n\n```ruby\nactivate :autoprefixer\n```\n\n### Node.js\n\nUse `autoprefixer` npm package:\n\n```js\nvar autoprefixer = require('autoprefixer');\nvar css = 'a { transition: transform 1s }';\nvar prefixed = autoprefixer.process(css).css;\n```\n\n### PHP\n\nYou can use Autoprefixer in PHP by\n[autoprefixer-php](https://github.com/vladkens/autoprefixer-php) library:\n\n\n```php\n$autoprefixer = new Autoprefixer();\n$css = 'a { transition: transform 1s }';\n$prefixed = $autoprefixer->compile($css);\n```\n\n### JavaScript\n\nYou can use Autoprefixer in the browser or a non-Node.js runtime\nwith [standalone version](https://raw.github.com/ai/autoprefixer-rails/master/vendor/autoprefixer.js).\n\n### PostCSS\n\nAutoprefixer can be also used as a [PostCSS](https://github.com/ai/postcss)\nprocessor, so you can combine it with other processors and parse CSS only once:\n\n```js\npostcss().\n use( autoprefixer(['> 1%', 'opera 12.5']).postcss ).\n use( compressor ).\n process(css);\n```\n\n### Sublime Text\n\nYou can process your styles directly in Sublime Text with the\n[sublime-autoprefixer](https://github.com/sindresorhus/sublime-autoprefixer)\nplugin.\n\n### Brackets\n\nStyles can processed automatically in Brackets using the\n[brackets-autoprefixer](https://github.com/mikaeljorhult/brackets-autoprefixer)\nextension.\n\n\n### Others\n\nYou can use the `autoprefixer` binary to process CSS files using\nany assets manager:\n\n```\nsudo npm install --global autoprefixer\nautoprefixer *.css\n```\n\nSee `autoprefixer -h` for help.\n\n## In-package Update\n\nIt’s highly recommended that you always use the latest version of Autoprefixer.\nIf by any chance you or your company are not able to update the package\n(e.g. in case of long test periods before any library updates), you can still\nupdate the very browser data that Autoprefixer fetches from Can I Use:\n\n```\nautoprefixer --update\n```\n\nNote that the in-package update doesn’t get any code fixes nor the\nimplementation of new features. It just keeps the browser popularity and\nsupport data up to date, and adds new browser versions.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/ai/autoprefixer/issues" + }, + "homepage": "https://github.com/ai/autoprefixer", + "_id": "autoprefixer@1.0.20140213", + "_from": "autoprefixer@~1.0.20140110" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/updaters/browsers.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/updaters/browsers.js new file mode 100644 index 00000000..afa4f7c1 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/updaters/browsers.js @@ -0,0 +1,69 @@ +(function() { + module.exports = function() { + var minor; + minor = ['bb', 'android']; + return this.github('Fyrd/caniuse/master/data.json', (function(_this) { + return function(data) { + var agent, browsers, caniuse, internal, intervals, normalize, _ref; + normalize = function(array) { + return array.reverse().filter(function(i) { + return i; + }); + }; + intervals = function(array) { + var i, interval, result, splited, sub, _i, _len; + result = []; + for (_i = 0, _len = array.length; _i < _len; _i++) { + interval = array[_i]; + splited = interval.split('-').map(function(i) { + return parseFloat(i); + }); + splited = splited.sort().reverse(); + sub = (function() { + var _j, _len1, _results; + _results = []; + for (_j = 0, _len1 = splited.length; _j < _len1; _j++) { + i = splited[_j]; + _results.push([i, interval, splited.length]); + } + return _results; + })(); + result = result.concat(sub); + } + return result; + }; + agent = function(name) { + var future, info, result, versions; + info = data.agents[name]; + future = normalize(info.versions.slice(-3)).map(function(i) { + return parseFloat(i); + }); + versions = intervals(normalize(info.versions.slice(0, -3))); + result = {}; + result.prefix = name === 'opera' ? '-o-' : "-" + info.prefix + "-"; + if (minor.indexOf(name) !== -1) { + result.minor = true; + } + if (future.length) { + result.future = future; + } + result.versions = versions.map(function(i) { + return i[0]; + }); + result.popularity = versions.map(function(i) { + return info.usage_global[i[1]] / i[2]; + }); + return result; + }; + browsers = {}; + _ref = _this.browsers; + for (caniuse in _ref) { + internal = _ref[caniuse]; + browsers[internal] = agent(caniuse); + } + return _this.save('browsers', browsers); + }; + })(this)); + }; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/autoprefixer/updaters/prefixes.js b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/updaters/prefixes.js new file mode 100644 index 00000000..5d2e7755 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/autoprefixer/updaters/prefixes.js @@ -0,0 +1,238 @@ +(function() { + var __slice = [].slice; + + module.exports = function(updater) { + var prefix, prefixes; + prefixes = {}; + prefix = function() { + var data, name, names, _i, _j, _len, _results; + names = 2 <= arguments.length ? __slice.call(arguments, 0, _i = arguments.length - 1) : (_i = 0, []), data = arguments[_i++]; + _results = []; + for (_j = 0, _len = names.length; _j < _len; _j++) { + name = names[_j]; + _results.push(prefixes[name] = data); + } + return _results; + }; + this.feature('border-radius', (function(_this) { + return function(browsers) { + return prefix('border-radius', 'border-top-left-radius', 'border-top-right-radius', 'border-bottom-right-radius', 'border-bottom-left-radius', { + mistakes: ['-ms-'], + browsers: browsers, + transition: true + }); + }; + })(this)); + this.feature('css-boxshadow', (function(_this) { + return function(browsers) { + return prefix('box-shadow', { + browsers: browsers, + transition: true + }); + }; + })(this)); + this.feature('css-animation', (function(_this) { + return function(browsers) { + return prefix('animation', 'animation-name', 'animation-duration', 'animation-delay', 'animation-direction', 'animation-fill-mode', 'animation-iteration-count', 'animation-play-state', 'animation-timing-function', '@keyframes', { + browsers: browsers + }); + }; + })(this)); + this.feature('css-transitions', (function(_this) { + return function(browsers) { + return prefix('transition', 'transition-property', 'transition-duration', 'transition-delay', 'transition-timing-function', { + mistakes: ['-ms-'], + browsers: browsers + }); + }; + })(this)); + this.feature('transforms2d', (function(_this) { + return function(browsers) { + prefix('transform', 'transform-origin', 'perspective', 'perspective-origin', { + browsers: browsers, + transition: true + }); + return prefix('transform-style', 'backface-visibility', { + browsers: browsers + }); + }; + })(this)); + this.feature('css-gradients', (function(_this) { + return function(browsers) { + browsers = _this.map(browsers, function(browser, name, version) { + if (name === 'android' && version < 4 || name === 'safari' && version < 5.1 || name === 'ios' && version < 5) { + return browser + ' old'; + } else { + return browser; + } + }); + return prefix('linear-gradient', 'repeating-linear-gradient', 'radial-gradient', 'repeating-radial-gradient', { + props: ['background', 'background-image', 'border-image'], + mistakes: ['-ms-'], + browsers: browsers + }); + }; + })(this)); + this.feature('css3-boxsizing', (function(_this) { + return function(browsers) { + return prefix('box-sizing', { + browsers: browsers + }); + }; + })(this)); + this.feature('css-filters', (function(_this) { + return function(browsers) { + return prefix('filter', { + browsers: browsers, + transition: true + }); + }; + })(this)); + this.feature('multicolumn', (function(_this) { + return function(browsers) { + prefix('columns', 'column-width', 'column-gap', 'column-rule', 'column-rule-color', 'column-rule-width', { + browsers: browsers, + transition: true + }); + return prefix('column-count', 'column-rule-style', 'column-span', 'column-fill', 'break-before', 'break-after', 'break-inside', { + browsers: browsers + }); + }; + })(this)); + this.feature('user-select-none', (function(_this) { + return function(browsers) { + return prefix('user-select', { + browsers: browsers + }); + }; + })(this)); + this.feature('flexbox', (function(_this) { + return function(browsers) { + browsers = _this.map(browsers, function(browser, name, version) { + if ((name === 'safari' || name === 'ios') && version < 7) { + return browser + ' 2009'; + } else if (name === 'chrome' && version < 21) { + return browser + ' 2009'; + } else { + return browser; + } + }); + prefix('display-flex', 'inline-flex', { + props: ['display'], + browsers: browsers + }); + prefix('flex', 'flex-grow', 'flex-shrink', 'flex-basis', { + transition: true, + browsers: browsers + }); + return prefix('flex-direction', 'flex-wrap', 'flex-flow', 'justify-content', 'order', 'align-items', 'align-self', 'align-content', { + browsers: browsers + }); + }; + })(this)); + this.feature('calc', (function(_this) { + return function(browsers) { + return prefix('calc', { + props: ['*'], + browsers: browsers + }); + }; + })(this)); + this.feature('background-img-opts', (function(_this) { + return function(browsers) { + return prefix('background-clip', 'background-origin', 'background-size', { + browsers: browsers + }); + }; + })(this)); + this.feature('font-feature', (function(_this) { + return function(browsers) { + return prefix('font-feature-settings', 'font-variant-ligatures', 'font-language-override', 'font-kerning', { + browsers: browsers + }); + }; + })(this)); + this.feature('border-image', (function(_this) { + return function(browsers) { + return prefix('border-image', { + browsers: browsers + }); + }; + })(this)); + this.feature('css-selection', (function(_this) { + return function(browsers) { + return prefix('::selection', { + selector: true, + browsers: browsers + }); + }; + })(this)); + this.feature('css-placeholder', (function(_this) { + return function(browsers) { + browsers = _this.map(browsers, function(browser, name, version) { + if (name === 'ff' && version <= 18) { + return browser + ' old'; + } else { + return browser; + } + }); + return prefix('::placeholder', { + selector: true, + browsers: browsers + }); + }; + })(this)); + this.feature('css-hyphens', (function(_this) { + return function(browsers) { + return prefix('hyphens', { + browsers: browsers + }); + }; + })(this)); + this.feature('fullscreen', (function(_this) { + return function(browsers) { + return prefix(':fullscreen', { + selector: true, + browsers: browsers + }); + }; + })(this)); + this.feature('css3-tabsize', (function(_this) { + return function(browsers) { + return prefix('tab-size', { + browsers: browsers + }); + }; + })(this)); + this.feature('intrinsic-width', (function(_this) { + return function(browsers) { + return prefix('max-content', 'min-content', 'fit-content', 'fill-available', { + props: ['width', 'min-width', 'max-width', 'height', 'min-height', 'max-height'], + browsers: browsers + }); + }; + })(this)); + this.feature('css3-cursors-newer', (function(_this) { + return function(browsers) { + return prefix('zoom-in', 'zoom-out', 'grab', 'grabbing', { + props: ['cursor'], + browsers: browsers + }); + }; + })(this)); + this.feature('css-sticky', (function(_this) { + return function(browsers) { + return prefix('sticky', { + props: ['position'], + browsers: browsers + }); + }; + })(this)); + return this.done((function(_this) { + return function() { + return _this.save('prefixes', prefixes); + }; + })(this)); + }; + +}).call(this); diff --git a/node_modules/gulp-autoprefixer/node_modules/bufferstreams/.npmignore b/node_modules/gulp-autoprefixer/node_modules/bufferstreams/.npmignore new file mode 100755 index 00000000..31f2e87a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/bufferstreams/.npmignore @@ -0,0 +1,5 @@ +*~ +*.swp +node_modules/ +.git +tests/results diff --git a/node_modules/gulp-autoprefixer/node_modules/bufferstreams/.travis.yml b/node_modules/gulp-autoprefixer/node_modules/bufferstreams/.travis.yml new file mode 100755 index 00000000..b2178387 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/bufferstreams/.travis.yml @@ -0,0 +1,9 @@ +language: node_js +node_js: + - 0.10 + +before_script: + - npm install --dev + +script: + - npm test diff --git a/node_modules/gulp-autoprefixer/node_modules/bufferstreams/LICENCE b/node_modules/gulp-autoprefixer/node_modules/bufferstreams/LICENCE new file mode 100755 index 00000000..454ab9d0 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/bufferstreams/LICENCE @@ -0,0 +1,21 @@ +The MIT License + +Copyright (c) 2013 Nicolas Froidure, <http://insertafter.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-autoprefixer/node_modules/bufferstreams/README.md b/node_modules/gulp-autoprefixer/node_modules/bufferstreams/README.md new file mode 100755 index 00000000..85fc9bd1 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/bufferstreams/README.md @@ -0,0 +1,42 @@ +# BufferStreams [![NPM version](https://badge.fury.io/js/bufferstreams.png)](https://npmjs.org/package/bufferstreams) [![Build Status](https://travis-ci.org/nfroidure/BufferStreams.png?branch=master)](https://travis-ci.org/nfroidure/BufferStreams) + +BufferStreams abstracts streams to allow you to deal with the whole contents in + a single buffer when it becomes necessary (by example: a legacy library that + do not support streams). + +It is not a good practice, just some glue. Using BufferStreams means: +* there is no library dealing with streams for your needs +* you filled an issue to the wrapped library to support streams + +## Usage +Install the [npm module](https://npmjs.org/package/bufferstreams): +```sh +npm install bufferstreams --save +``` +Then, in your scripts: +```js +var BufferStreams = require('bufferstreams'); + +Fs.createReadStream('input.txt') + .pipe(new BufferStreams(function(err, buf, cb) { + + // err will be filled with an error if the piped in stream emits one. + if(err) { + throw err; + } + + // buf will contain the whole piped in stream contents + buf = Buffer(buf.toString(utf-8).repalce('foo', 'bar')); + + // cb is a callback to pass the result back to the piped out stream + // first argument is an error that wil be emitted if one + // the second argument is the modified buffer + cb(null, buf); + + })) + .pipe(Fs.createWriteStream('output.txt')); +``` + +## Contributing +Feel free to pull your code if you agree with publishing it under the MIT license. + diff --git a/node_modules/gulp-autoprefixer/node_modules/bufferstreams/package.json b/node_modules/gulp-autoprefixer/node_modules/bufferstreams/package.json new file mode 100755 index 00000000..fd607d19 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/bufferstreams/package.json @@ -0,0 +1,45 @@ +{ + "name": "bufferstreams", + "version": "0.0.1", + "description": "Abstract streams to deal with the whole buffered contents.", + "homepage": "https://github.com/nfroidure/BufferStreams", + "main": "src/index.js", + "scripts": { + "test": "mocha tests/*.mocha.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/nfroidure/BufferStreams" + }, + "keywords": [ + "buffer", + "streaming", + "stream", + "async", + "abstract" + ], + "devDependencies": { + "mocha": "1.x.x", + "event-stream": "1.x.x" + }, + "author": { + "name": "Nicolas Froidure", + "url": "http://www.insertafter.com/blog.html" + }, + "engines": { + "node": ">= 0.10.0" + }, + "licenses": [ + { + "type": "MIT", + "url": "https://github.com/nfroidure/BufferStreams/blob/master/LICENSE" + } + ], + "bugs": { + "url": "https://github.com/nfroidure/BufferStreams/issues" + }, + "readme": "# BufferStreams [![NPM version](https://badge.fury.io/js/bufferstreams.png)](https://npmjs.org/package/bufferstreams) [![Build Status](https://travis-ci.org/nfroidure/BufferStreams.png?branch=master)](https://travis-ci.org/nfroidure/BufferStreams)\n\nBufferStreams abstracts streams to allow you to deal with the whole contents in\n a single buffer when it becomes necessary (by example: a legacy library that\n do not support streams).\n\nIt is not a good practice, just some glue. Using BufferStreams means:\n* there is no library dealing with streams for your needs\n* you filled an issue to the wrapped library to support streams\n\n## Usage\nInstall the [npm module](https://npmjs.org/package/bufferstreams):\n```sh\nnpm install bufferstreams --save\n```\nThen, in your scripts:\n```js\nvar BufferStreams = require('bufferstreams');\n\nFs.createReadStream('input.txt')\n .pipe(new BufferStreams(function(err, buf, cb) {\n\n // err will be filled with an error if the piped in stream emits one.\n if(err) {\n throw err;\n }\n\n // buf will contain the whole piped in stream contents\n buf = Buffer(buf.toString(utf-8).repalce('foo', 'bar'));\n\n // cb is a callback to pass the result back to the piped out stream\n // first argument is an error that wil be emitted if one\n // the second argument is the modified buffer\n cb(null, buf);\n\n }))\n .pipe(Fs.createWriteStream('output.txt'));\n```\n\n## Contributing\nFeel free to pull your code if you agree with publishing it under the MIT license.\n\n", + "readmeFilename": "README.md", + "_id": "bufferstreams@0.0.1", + "_from": "bufferstreams@0.0.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/bufferstreams/src/index.js b/node_modules/gulp-autoprefixer/node_modules/bufferstreams/src/index.js new file mode 100644 index 00000000..a19a0f96 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/bufferstreams/src/index.js @@ -0,0 +1,45 @@ +var PassThrough = require('stream').PassThrough; +var util = require('util'); + +// Inherit of PassThrough stream +util.inherits(BufferStream, PassThrough); + +// Constructor +function BufferStream(cb) { + + // Ensure new were used + if (!(this instanceof BufferStream)) { + throw Error('Please use the "new" operator to instanciate a BufferStream.'); + } + + // Parent constructor + PassThrough.call(this); + + // Keep a reference to the callback + this._cb = cb; + + // Internal buffer + this._buf = Buffer(''); +} + +BufferStream.prototype._transform = function(chunk, encoding, done) { + + this._buf = Buffer.concat([this._buf, chunk], this._buf.length + chunk.length); + + done(); + +}; + +BufferStream.prototype._flush = function(done) { + var _that = this; + + this._cb(null, this._buf, function(err, buf) { + if (buf && buf.length) { + _that.push(buf); + } + done(); + }); + +}; + +module.exports = BufferStream; diff --git a/node_modules/gulp-autoprefixer/node_modules/bufferstreams/tests/index.mocha.js b/node_modules/gulp-autoprefixer/node_modules/bufferstreams/tests/index.mocha.js new file mode 100755 index 00000000..7b0ccc32 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/bufferstreams/tests/index.mocha.js @@ -0,0 +1,111 @@ +var assert = require('assert') + , es = require('event-stream') + , BufferStream = require('../src') +; + +// Helpers +function syncBufferPrefixer(headerText) { + return new BufferStream(function(err, buf, cb) { + assert.equal(err, null); + if(null === buf) { + cb(null, Buffer(headerText)); + } else { + cb(null, Buffer.concat([Buffer(headerText), buf])); + } + }); +} +function asyncBufferPrefixer(headerText) { + return new BufferStream(function(err, buf, cb) { + assert.equal(err, null); + if(null === buf) { + setTimeout(function() { + cb(null, Buffer(headerText)); + }, 0); + } else { + setTimeout(function() { + cb(null, Buffer.concat([Buffer(headerText), buf])); + }, 0); + } + }); +} + +// Tests +describe('Abstract buffers', function() { + describe('synchonously', function() { + + it('should work with one pipe', function(done) { + es.readArray(['te', 'st']) + .pipe(syncBufferPrefixer('plop')) + .pipe(es.wait(function(err, data) { + assert.equal(err, null); + assert.equal(data, 'ploptest'); + done(); + })); + }); + + it('should work when returning a null buffer', function(done) { + + es.readArray(['te', 'st']) + .pipe(new BufferStream(function(err, buf, cb){ + cb(null, null); + })) + .pipe(es.wait(function(err, data) { + assert.equal(err, null); + assert.equal(data, ''); + done(); + })); + }); + + it('should work with multiple pipes', function(done) { + es.readArray(['te', 'st']) + .pipe(syncBufferPrefixer('plop')) + .pipe(syncBufferPrefixer('plip')) + .pipe(syncBufferPrefixer('plap')) + .pipe(es.wait(function(err, data) { + assert.equal(err, null); + assert.equal(data, 'plapplipploptest'); + done(); + })); + }); + + }); + + describe('asynchonously', function() { + + it('should work with one pipe', function(done) { + es.readArray(['te', 'st']) + .pipe(asyncBufferPrefixer('plop')) + .pipe(es.wait(function(err, data) { + assert.equal(err, null); + assert.equal(data, 'ploptest'); + done(); + })); + }); + + it('should work when returning a null buffer', function(done) { + + es.readArray(['te', 'st']) + .pipe(new BufferStream(function(err, buf, cb){ + cb(null, null); + })) + .pipe(es.wait(function(err, data) { + assert.equal(err, null); + assert.equal(data, ''); + done(); + })); + }); + + it('should work with multiple pipes', function(done) { + es.readArray(['te', 'st']) + .pipe(asyncBufferPrefixer('plop')) + .pipe(asyncBufferPrefixer('plip')) + .pipe(asyncBufferPrefixer('plap')) + .pipe(es.wait(function(err, data) { + assert.equal(err, null); + assert.equal(data, 'plapplipploptest'); + done(); + })); + }); + + }); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/.npmignore b/node_modules/gulp-autoprefixer/node_modules/gulp-util/.npmignore new file mode 100644 index 00000000..b5ef13a3 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/.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-autoprefixer/node_modules/gulp-util/.travis.yml b/node_modules/gulp-autoprefixer/node_modules/gulp-util/.travis.yml new file mode 100644 index 00000000..33ad9f8c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/.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-autoprefixer/node_modules/gulp-util/LICENSE b/node_modules/gulp-autoprefixer/node_modules/gulp-util/LICENSE new file mode 100755 index 00000000..7cbe012c --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/README.md new file mode 100644 index 00000000..fd0e506e --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/README.md @@ -0,0 +1,166 @@ +# gulp-util [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Dependency Status](https://david-dm.org/gulpjs/gulp-util.png?theme=shields.io)](https://david-dm.org/gulpjs/gulp-util) + +## 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 +``` + +### colors + +This is an instance of [chalk](https://github.com/sindresorhus/chalk) + +### date + +This is an instance of [node-dateformat](https://github.com/felixge/node-dateformat). + +### linefeed + +Just `\n`. Use this. + +### 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.task('scripts', function() { + gulp.src('src/**/*.js') + .pipe(concat('script.js')) + .pipe(gulp.env.production ? uglify() : gutil.noop()) + .pipe(gulp.dest('dist/'); +}); +``` + +## combine(streams...) + +Argument may also be an array of streams. Returns a function that returns the combined stream. Useful for keeping things DRY. This is a simple wrapper around event-stream's `.pipeline` + +```javascript +var scripts = gutil.combine( + coffee({bare: true}), + uglify(), + concat('script.js'), + gulp.dest('dist/') +); + +gulp.task('default', function() { + gulp.src('*.coffee').pipe(scripts()); +}); +``` + +## 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. + +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.png +[travis-url]: https://travis-ci.org/gulpjs/gulp-util +[travis-image]: https://travis-ci.org/gulpjs/gulp-util.png?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.png diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/index.js new file mode 100644 index 00000000..6746ee4b --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/lib/File.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/File.js new file mode 100644 index 00000000..690a508a --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/lib/PluginError.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/PluginError.js new file mode 100644 index 00000000..96555672 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/PluginError.js @@ -0,0 +1,65 @@ +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.message = 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; + + // if message is an Error grab crap off it + if (options.message instanceof Error) { + this.name = options.message.name; + this.message = options.message.message; + this.fileName = options.message.fileName; + this.lineNumber = options.message.lineNumber; + this.stack = options.message.stack; + } else { // else check options obj + this.name = options.name; + this.message = options.message; + this.fileName = options.fileName; + this.lineNumber = options.lineNumber; + this.stack = options.stack; + } + + // 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 = '['+colors.green('gulp')+'] '+this.name+' in plugin \''+colors.cyan(this.plugin)+'\''; + var msg = this.showStack ? (this._stack || this.stack) : this.message; + return sig+': '+msg; +}; + +module.exports = PluginError; \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/beep.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/beep.js new file mode 100644 index 00000000..5473d754 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/beep.js @@ -0,0 +1,3 @@ +module.exports = function() { + process.stdout.write('\x07'); +}; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/buffer.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/buffer.js new file mode 100644 index 00000000..4cb064ac --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/lib/colors.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/colors.js new file mode 100644 index 00000000..bc804940 --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/lib/combine.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/combine.js new file mode 100644 index 00000000..f20712d2 --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/lib/date.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/date.js new file mode 100644 index 00000000..935793cc --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/lib/env.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/env.js new file mode 100644 index 00000000..ea1e03e4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/lib/isBuffer.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/isBuffer.js new file mode 100644 index 00000000..0e23782c --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/lib/isNull.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/isNull.js new file mode 100644 index 00000000..403bb30e --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/lib/isStream.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/isStream.js new file mode 100644 index 00000000..9ce0929b --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/lib/linefeed.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/linefeed.js new file mode 100644 index 00000000..5b0dfa4b --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/lib/log.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/log.js new file mode 100644 index 00000000..cdbb22fc --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/log.js @@ -0,0 +1,9 @@ +var colors = require('./colors'); + +module.exports = function(){ + var sig = '['+colors.green('gulp')+']'; + var args = Array.prototype.slice.call(arguments); + args.unshift(sig); + console.log.apply(console, args); + return this; +}; \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/noop.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/noop.js new file mode 100644 index 00000000..7862cb16 --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/lib/replaceExtension.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/replaceExtension.js new file mode 100644 index 00000000..3f76938e --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/lib/template.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/lib/template.js new file mode 100644 index 00000000..c467820f --- /dev/null +++ b/node_modules/gulp-autoprefixer/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-autoprefixer/node_modules/gulp-util/node_modules/chalk/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/index.js new file mode 100644 index 00000000..a21f7022 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/index.js @@ -0,0 +1,63 @@ +'use strict'; +var ansi = require('ansi-styles'); +var stripAnsi = require('strip-ansi'); +var hasColor = require('has-color'); +var defineProps = Object.defineProperties; +var chalk = module.exports; + +var styles = (function () { + var ret = {}; + + ansi.grey = ansi.gray; + + Object.keys(ansi).forEach(function (key) { + ret[key] = { + get: function () { + this._styles.push(key); + return this; + } + }; + }); + + return ret; +})(); + +function init() { + var ret = {}; + + Object.keys(styles).forEach(function (name) { + ret[name] = { + get: function () { + var obj = defineProps(function self() { + var str = [].slice.call(arguments).join(' '); + + if (!chalk.enabled) { + return str; + } + + return self._styles.reduce(function (str, name) { + var code = ansi[name]; + return str ? code.open + str + code.close : ''; + }, str); + }, styles); + + obj._styles = []; + + return obj[name]; + } + } + }); + + return ret; +} + +defineProps(chalk, init()); + +chalk.styles = ansi; +chalk.stripColor = stripAnsi; +chalk.supportsColor = hasColor; + +// detect mode if not set manually +if (chalk.enabled === undefined) { + chalk.enabled = chalk.supportsColor; +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/.bin/strip-ansi new file mode 120000 index 00000000..b65c9f81 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js new file mode 100644 index 00000000..3da548c4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/ansi-styles.js @@ -0,0 +1,38 @@ +'use strict'; +var styles = module.exports; + +var codes = { + reset: [0, 0], + + bold: [1, 22], + italic: [3, 23], + underline: [4, 24], + inverse: [7, 27], + 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 = '\x1b[' + val[0] + 'm'; + style.close = '\x1b[' + val[1] + 'm'; +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json new file mode 100644 index 00000000..2d61dabe --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/package.json @@ -0,0 +1,58 @@ +{ + "name": "ansi-styles", + "version": "1.0.0", + "description": "ANSI escape codes for colorizing strings in the terminal", + "keywords": [ + "ansi", + "styles", + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "string", + "tty", + "escape", + "formatting", + "rgb", + "256", + "shell", + "xterm", + "log", + "logging", + "command-line", + "text" + ], + "homepage": "https://github.com/sindresorhus/ansi-styles", + "bugs": { + "url": "https://github.com/sindresorhus/ansi-styles/issues" + }, + "license": "MIT", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "http://sindresorhus.com" + }, + "files": [ + "ansi-styles.js" + ], + "main": "ansi-styles", + "repository": { + "type": "git", + "url": "git://github.com/sindresorhus/ansi-styles.git" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "mocha": "~1.12.0" + }, + "engines": { + "node": ">=0.8.0" + }, + "readme": "# ansi-styles [![Build Status](https://secure.travis-ci.org/sindresorhus/ansi-styles.png?branch=master)](http://travis-ci.org/sindresorhus/ansi-styles)\n\n> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for colorizing strings in the terminal.\n\nYou probably want the higher-level [chalk](https://github.com/sindresorhus/chalk) module for styling your strings.\n\n![screenshot](screenshot.png)\n\n\n## Install\n\nInstall with [npm](https://npmjs.org/package/ansi-styles): `npm install --save ansi-styles`\n\n\n## Example\n\n```js\nvar ansi = require('ansi-styles');\n\nconsole.log(ansi.green.open + 'Hello world!' + ansi.green.close);\n```\n\n## API\n\nEach style has an `open` and `close` property.\n\n\n## Styles\n\n### General\n\n- reset\n- bold\n- italic\n- underline\n- inverse\n- strikethrough\n\n### Text colors\n\n- black\n- red\n- green\n- yellow\n- blue\n- magenta\n- cyan\n- white\n- gray\n\n### Background colors\n\n- bgBlack\n- bgRed\n- bgGreen\n- bgYellow\n- bgBlue\n- bgMagenta\n- bgCyan\n- bgWhite\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n", + "readmeFilename": "readme.md", + "_id": "ansi-styles@1.0.0", + "_from": "ansi-styles@~1.0.0" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md new file mode 100644 index 00000000..4ac8cbd0 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/ansi-styles/readme.md @@ -0,0 +1,65 @@ +# ansi-styles [![Build Status](https://secure.travis-ci.org/sindresorhus/ansi-styles.png?branch=master)](http://travis-ci.org/sindresorhus/ansi-styles) + +> [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) for colorizing 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 + +Install with [npm](https://npmjs.org/package/ansi-styles): `npm install --save ansi-styles` + + +## Example + +```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 +- italic +- underline +- inverse +- strikethrough + +### 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-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js new file mode 100644 index 00000000..27316b1f --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/has-color.js @@ -0,0 +1,24 @@ +'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.isTTY) { + return false; + } + + if (process.platform === 'win32') { + return true; + } + + if ('COLORTERM' in process.env) { + return true; + } + + return /^screen|^xterm|color|ansi|cygwin|linux/i.test(process.env.TERM); +})(); diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json new file mode 100644 index 00000000..e55a6244 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/package.json @@ -0,0 +1,55 @@ +{ + "name": "has-color", + "version": "0.1.4", + "description": "Detect whether a terminal supports color", + "keywords": [ + "color", + "colour", + "colors", + "terminal", + "console", + "cli", + "ansi", + "styles", + "tty", + "rgb", + "256", + "shell", + "xterm", + "command-line", + "support", + "capability", + "detect" + ], + "homepage": "https://github.com/sindresorhus/has-color", + "bugs": { + "url": "https://github.com/sindresorhus/has-color/issues" + }, + "license": "MIT", + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "http://sindresorhus.com" + }, + "files": [ + "has-color.js" + ], + "main": "has-color", + "repository": { + "type": "git", + "url": "git://github.com/sindresorhus/has-color.git" + }, + "scripts": { + "test": "mocha" + }, + "devDependencies": { + "mocha": "~1.12.0" + }, + "engines": { + "node": ">=0.8.0" + }, + "readme": "# has-color [![Build Status](https://secure.travis-ci.org/sindresorhus/has-color.png?branch=master)](http://travis-ci.org/sindresorhus/has-color)\n\n> Detect whether a terminal supports color.\n\nUsed in the terminal color module [chalk](https://github.com/sindresorhus/chalk).\n\n\n## Install\n\nInstall with [npm](https://npmjs.org/package/has-color): `npm install --save has-color`\n\n\n## Example\n\n```js\nvar hasColor = require('has-color');\n\nif (hasColor) {\n\tconsole.log('Terminal supports color.');\n}\n```\n\nIt obeys the CLI flags `--color` and `--no-color`.\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n", + "readmeFilename": "readme.md", + "_id": "has-color@0.1.4", + "_from": "has-color@~0.1.0" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md new file mode 100644 index 00000000..0918c851 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/has-color/readme.md @@ -0,0 +1,28 @@ +# has-color [![Build Status](https://secure.travis-ci.org/sindresorhus/has-color.png?branch=master)](http://travis-ci.org/sindresorhus/has-color) + +> Detect whether a terminal supports color. + +Used in the terminal color module [chalk](https://github.com/sindresorhus/chalk). + + +## Install + +Install with [npm](https://npmjs.org/package/has-color): `npm install --save has-color` + + +## Example + +```js +var hasColor = require('has-color'); + +if (hasColor) { + console.log('Terminal supports color.'); +} +``` + +It obeys the CLI flags `--color` and `--no-color`. + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js new file mode 100755 index 00000000..f8019cda --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/cli.js @@ -0,0 +1,27 @@ +#!/usr/bin/env node +'use strict'; +var fs = require('fs'); +var strip = require('./index'); +var input = process.argv[2]; + +if (process.argv.indexOf('-h') !== -1 || process.argv.indexOf('--help') !== -1) { + console.log('strip-ansi <input file> > <output file>'); + console.log('or'); + console.log('cat <input file> | strip-ansi > <output file>'); + return; +} + +if (process.argv.indexOf('-v') !== -1 || process.argv.indexOf('--version') !== -1) { + console.log(require('./package').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-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js new file mode 100644 index 00000000..62320c59 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/index.js @@ -0,0 +1,4 @@ +'use strict'; +module.exports = function (str) { + return typeof str === 'string' ? str.replace(/\x1B\[([0-9]{1,2}(;[0-9]{1,2})?)?[m|K]/g, '') : str; +}; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json new file mode 100644 index 00000000..7ca2b5d1 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/package.json @@ -0,0 +1,64 @@ +{ + "name": "strip-ansi", + "version": "0.1.1", + "description": "Strip ANSI escape codes (used for colorizing strings in the terminal)", + "license": "MIT", + "bin": { + "strip-ansi": "cli.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/sindresorhus/strip-ansi" + }, + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "http://sindresorhus.com" + }, + "engines": { + "node": ">=0.8.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" + ], + "devDependencies": { + "mocha": "~1.x" + }, + "readme": "# strip-ansi [![Build Status](https://secure.travis-ci.org/sindresorhus/strip-ansi.png?branch=master)](http://travis-ci.org/sindresorhus/strip-ansi)\n\n> Strip [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) (used for colorizing strings in the terminal)\n\nUsed in the terminal color module [chalk](https://github.com/sindresorhus/chalk).\n\n\n## Install\n\nInstall locally with [npm](https://npmjs.org/package/strip-ansi):\n\n```\nnpm install --save strip-ansi\n```\n\nOr globally if you want to use it as a CLI app:\n\n```\nnpm install --global strip-ansi\n```\n\nYou can then use it in your Terminal like:\n\n```\nstrip-ansi file-with-color-codes\n```\n\nOr pipe something to it:\n\n```\nls | strip-ansi\n```\n\n\n## Example\n\n```js\nvar stripAnsi = require('strip-ansi');\nstripAnsi('\\x1b[4mcake\\x1b[0m');\n//=> cake\n```\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n", + "readmeFilename": "readme.md", + "bugs": { + "url": "https://github.com/sindresorhus/strip-ansi/issues" + }, + "homepage": "https://github.com/sindresorhus/strip-ansi", + "_id": "strip-ansi@0.1.1", + "_from": "strip-ansi@~0.1.0" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md new file mode 100644 index 00000000..eb661b3d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/node_modules/strip-ansi/readme.md @@ -0,0 +1,46 @@ +# strip-ansi [![Build Status](https://secure.travis-ci.org/sindresorhus/strip-ansi.png?branch=master)](http://travis-ci.org/sindresorhus/strip-ansi) + +> Strip [ANSI escape codes](http://en.wikipedia.org/wiki/ANSI_escape_code#Colors_and_Styles) (used for colorizing strings in the terminal) + +Used in the terminal color module [chalk](https://github.com/sindresorhus/chalk). + + +## Install + +Install locally with [npm](https://npmjs.org/package/strip-ansi): + +``` +npm install --save strip-ansi +``` + +Or globally if you want to use it as a CLI app: + +``` +npm install --global strip-ansi +``` + +You can then use it in your Terminal like: + +``` +strip-ansi file-with-color-codes +``` + +Or pipe something to it: + +``` +ls | strip-ansi +``` + + +## Example + +```js +var stripAnsi = require('strip-ansi'); +stripAnsi('\x1b[4mcake\x1b[0m'); +//=> cake +``` + + +## License + +MIT © [Sindre Sorhus](http://sindresorhus.com) diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/package.json new file mode 100644 index 00000000..853b0144 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/package.json @@ -0,0 +1,61 @@ +{ + "name": "chalk", + "version": "0.4.0", + "description": "Terminal string styling done right. Created because the `colors` module does some really horrible things.", + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/sindresorhus/chalk" + }, + "author": { + "name": "Sindre Sorhus", + "email": "sindresorhus@gmail.com", + "url": "http://sindresorhus.com" + }, + "engines": { + "node": ">=0.8.0" + }, + "scripts": { + "test": "mocha" + }, + "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": { + "has-color": "~0.1.0", + "ansi-styles": "~1.0.0", + "strip-ansi": "~0.1.0" + }, + "devDependencies": { + "mocha": "~1.x" + }, + "readme": "# <img width=\"250\" src=\"logo.png\" alt=\"chalk\">\n\n> Terminal string styling done right\n\n[![Build Status](https://secure.travis-ci.org/sindresorhus/chalk.png?branch=master)](http://travis-ci.org/sindresorhus/chalk)\n\n[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.\n\n**Chalk is a clean and focused alternative.**\n\n![screenshot](screenshot.png)\n\n\n## Why\n\n- **Doesn't extend String.prototype**\n- Expressive API\n- Clean and focused\n- Auto-detects color support\n- Actively maintained\n- [Used by 150+ modules](https://npmjs.org/browse/depended/chalk)\n\n\n## Install\n\nInstall with [npm](https://npmjs.org/package/chalk): `npm install --save chalk`\n\n\n## Example\n\nChalk comes with an easy to use composable API where you just chain and nest the styles you want.\n\n```js\nvar chalk = require('chalk');\n\n// style a string\nconsole.log( chalk.blue('Hello world!') );\n\n// combine styled and normal strings\nconsole.log( chalk.blue('Hello'), 'World' + chalk.red('!') );\n\n// compose multiple styles using the chainable API\nconsole.log( chalk.blue.bgRed.bold('Hello world!') );\n\n// nest styles\nconsole.log( chalk.red('Hello', chalk.underline.bgBlue('world') + '!') );\n\n// pass in multiple arguments\nconsole.log( chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz') );\n```\n\nYou can easily define your own themes.\n\n```js\nvar chalk = require('chalk');\nvar error = chalk.bold.red;\nconsole.log(error('Error!'));\n```\n\n\n## API\n\n### chalk.`<style>[.<style>...](string, [string...])`\n\nExample: `chalk.red.bold.underline('Hello', 'world');`\n\nChain [styles](#styles) and call the last one as a method with a string argument. Order doesn't matter.\n\nMultiple arguments will be separated by space.\n\n### chalk.enabled\n\nColor support is automatically detected, but you can override it.\n\n### chalk.supportsColor\n\nDetect whether the terminal [supports color](https://github.com/sindresorhus/has-color).\n\nCan be overridden by the user with the flags `--color` and `--no-color`.\n\nUsed internally and handled for you, but exposed for convenience.\n\n### chalk.styles\n\nExposes the styles as [ANSI escape codes](https://github.com/sindresorhus/ansi-styles).\n\nGenerally not useful, but you might need just the `.open` or `.close` escape code if you're mixing externally styled strings with yours.\n\n```js\nvar chalk = require('chalk');\n\nconsole.log(chalk.styles.red);\n//=> {open: '\\x1b[31m', close: '\\x1b[39m'}\n\nconsole.log(chalk.styles.red.open + 'Hello' + chalk.styles.red.close);\n```\n\n### chalk.stripColor(string)\n\n[Strip color](https://github.com/sindresorhus/strip-ansi) from a string.\n\nCan be useful in combination with `.supportsColor` to strip color on externally styled text when it's not supported.\n\nExample:\n\n```js\nvar chalk = require('chalk');\nvar styledString = fromExternal();\n\nif (!chalk.supportsColor) {\n\tchalk.stripColor(styledString);\n}\n```\n\n\n## Styles\n\n### General\n\n- reset\n- bold\n- italic\n- underline\n- inverse\n- strikethrough\n\n### Text colors\n\n- black\n- red\n- green\n- yellow\n- blue\n- magenta\n- cyan\n- white\n- gray\n\n### Background colors\n\n- bgBlack\n- bgRed\n- bgGreen\n- bgYellow\n- bgBlue\n- bgMagenta\n- bgCyan\n- bgWhite\n\n\n## License\n\nMIT © [Sindre Sorhus](http://sindresorhus.com)\n\n\n-\n\n[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/sindresorhus/chalk/trend.png)](https://bitdeli.com/free \"Bitdeli Badge\")\n", + "readmeFilename": "readme.md", + "bugs": { + "url": "https://github.com/sindresorhus/chalk/issues" + }, + "homepage": "https://github.com/sindresorhus/chalk", + "_id": "chalk@0.4.0", + "_from": "chalk@~0.4.0" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/readme.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/readme.md new file mode 100644 index 00000000..46813acf --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/chalk/readme.md @@ -0,0 +1,158 @@ +# <img width="250" src="logo.png" alt="chalk"> + +> Terminal string styling done right + +[![Build Status](https://secure.travis-ci.org/sindresorhus/chalk.png?branch=master)](http://travis-ci.org/sindresorhus/chalk) + +[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](screenshot.png) + + +## Why + +- **Doesn't extend String.prototype** +- Expressive API +- Clean and focused +- Auto-detects color support +- Actively maintained +- [Used by 150+ modules](https://npmjs.org/browse/depended/chalk) + + +## Install + +Install with [npm](https://npmjs.org/package/chalk): `npm install --save chalk` + + +## Example + +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!') ); + +// nest styles +console.log( chalk.red('Hello', chalk.underline.bgBlue('world') + '!') ); + +// pass in multiple arguments +console.log( chalk.blue('Hello', 'World!', 'Foo', 'bar', 'biz', 'baz') ); +``` + +You can easily define your own themes. + +```js +var chalk = require('chalk'); +var error = chalk.bold.red; +console.log(error('Error!')); +``` + + +## 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/has-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: '\x1b[31m', close: '\x1b[39m'} + +console.log(chalk.styles.red.open + 'Hello' + chalk.styles.red.close); +``` + +### 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 = fromExternal(); + +if (!chalk.supportsColor) { + chalk.stripColor(styledString); +} +``` + + +## Styles + +### General + +- reset +- bold +- italic +- underline +- inverse +- strikethrough + +### 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) + + +- + +[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/sindresorhus/chalk/trend.png)](https://bitdeli.com/free "Bitdeli Badge") diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/LICENSE b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/LICENSE new file mode 100644 index 00000000..57d44e2a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/dateformat/Readme.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/Readme.md new file mode 100644 index 00000000..12f9872d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/Readme.md @@ -0,0 +1,79 @@ +# dateformat + +A node.js package for Steven Levithan's excellent [dateFormat()][dateformat] function. + +## 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 +``` + +## 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-autoprefixer/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js new file mode 100644 index 00000000..e1c38245 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/lib/dateformat.js @@ -0,0 +1,183 @@ +/* + * 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. + */ + +var dateFormat = function () { + var token = /d{1,4}|m{1,4}|yy(?:yy)?|([HhMsTt])\1?|[LloSZWN]|"[^"]*"|'[^']*'/g, + timezone = /\b(?:[PMCEA][SDP]T|(?:Pacific|Mountain|Central|Eastern|Atlantic) (?:Standard|Daylight|Prevailing) Time|(?:GMT|UTC)(?:[-+]\d{4})?)\b/g, + timezoneClip = /[^-+\dA-Z]/g, + pad = function (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 + */ + getWeek = function (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 + weekDiff; + }, + + /** + * Get ISO-8601 numeric representation of the day of the week + * 1 (for Monday) through 7 (for Sunday) + */ + + getDayOfWeek = function(date){ + var dow = date.getDay(); + if(dow === 0) dow = 7; + return dow; + }; + + // Regexes and supporting functions are cached through closure + return function (date, mask, utc, gmt) { + var dF = dateFormat; + + // You can't provide utc if you skip other args (use the "UTC:" mask prefix) + if (arguments.length == 1 && Object.prototype.toString.call(date) == "[object 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(dF.masks[mask] || mask || dF.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", + d = date[_ + "Date"](), + D = date[_ + "Day"](), + m = date[_ + "Month"](), + y = date[_ + "FullYear"](), + H = date[_ + "Hours"](), + M = date[_ + "Minutes"](), + s = date[_ + "Seconds"](), + L = date[_ + "Milliseconds"](), + o = utc ? 0 : date.getTimezoneOffset(), + W = getWeek(date), + N = getDayOfWeek(date), + flags = { + d: d, + dd: pad(d), + ddd: dF.i18n.dayNames[D], + dddd: dF.i18n.dayNames[D + 7], + m: m + 1, + mm: pad(m + 1), + mmm: dF.i18n.monthNames[m], + mmmm: dF.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(L > 99 ? Math.round(L / 10) : L), + 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 ($0) { + return $0 in flags ? flags[$0] : $0.slice(1, $0.length - 1); + }); + }; +}(); + +// Some common format strings +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:ss", + 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" + ] +}; + +/* +// For convenience... +Date.prototype.format = function (mask, utc) { + return dateFormat(this, mask, utc); +}; +*/ + +if (typeof exports !== "undefined") { + module.exports = dateFormat; +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/package.json new file mode 100644 index 00000000..deee5fee --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/package.json @@ -0,0 +1,40 @@ +{ + "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": { + "name": "Steven Levithan" + }, + "contributors": [ + { + "name": "Steven Levithan" + }, + { + "name": "Felix Geisendörfer", + "email": "felix@debuggable.com" + }, + { + "name": "Christoph Tavan", + "email": "dev@tavan.de" + } + ], + "version": "1.0.7-1.2.3", + "main": "./lib/dateformat", + "dependencies": {}, + "devDependencies": {}, + "engines": { + "node": "*" + }, + "repository": { + "type": "git", + "url": "https://github.com/felixge/node-dateformat.git" + }, + "readme": "# dateformat\n\nA node.js package for Steven Levithan's excellent [dateFormat()][dateformat] function.\n\n## Modifications\n\n* Removed the `Date.prototype.format` method. Sorry folks, but extending native prototypes is for suckers.\n* Added a `module.exports = dateFormat;` statement at the bottom\n* Added the placeholder `N` to get the ISO 8601 numeric representation of the day of the week\n\n## Installation\n\n```bash\n$ npm install dateformat\n```\n\n## Usage\n\nAs taken from Steven's post, modified to match the Modifications listed above:\n```js\n var dateFormat = require('dateformat');\n var now = new Date();\n\n // Basic usage\n dateFormat(now, \"dddd, mmmm dS, yyyy, h:MM:ss TT\");\n // Saturday, June 9th, 2007, 5:46:21 PM\n\n // You can use one of several named masks\n dateFormat(now, \"isoDateTime\");\n // 2007-06-09T17:46:21\n\n // ...Or add your own\n dateFormat.masks.hammerTime = 'HH:MM! \"Can\\'t touch this!\"';\n dateFormat(now, \"hammerTime\");\n // 17:46! Can't touch this!\n\n // When using the standalone dateFormat function,\n // you can also provide the date as a string\n dateFormat(\"Jun 9 2007\", \"fullDate\");\n // Saturday, June 9, 2007\n\n // Note that if you don't include the mask argument,\n // dateFormat.masks.default is used\n dateFormat(now);\n // Sat Jun 09 2007 17:46:21\n\n // And if you don't include the date argument,\n // the current date and time is used\n dateFormat();\n // Sat Jun 09 2007 17:46:22\n\n // You can also skip the date argument (as long as your mask doesn't\n // contain any numbers), in which case the current date/time is used\n dateFormat(\"longTime\");\n // 5:46:22 PM EST\n\n // And finally, you can convert local time to UTC time. Simply pass in\n // true as an additional argument (no argument skipping allowed in this case):\n dateFormat(now, \"longTime\", true);\n // 10:46:21 PM UTC\n\n // ...Or add the prefix \"UTC:\" or \"GMT:\" to your mask.\n dateFormat(now, \"UTC:h:MM:ss TT Z\");\n // 10:46:21 PM UTC\n\n // You can also get the ISO 8601 week of the year:\n dateFormat(now, \"W\");\n // 42\n\n // and also get the ISO 8601 numeric representation of the day of the week:\n dateFormat(now,\"N\");\n // 6\n```\n## License\n\n(c) 2007-2009 Steven Levithan [stevenlevithan.com][stevenlevithan], MIT license.\n\n[dateformat]: http://blog.stevenlevithan.com/archives/date-time-format\n[stevenlevithan]: http://stevenlevithan.com/\n", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/felixge/node-dateformat/issues" + }, + "_id": "dateformat@1.0.7-1.2.3", + "_from": "dateformat@~1.0.7-1.2.3" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/basic.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/basic.js new file mode 100644 index 00000000..9602a72a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/basic.js @@ -0,0 +1,45 @@ +var dateFormat = require('./lib/dateformat.js'); +var now = new Date(); + +// Basic usage +console.log(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 +console.log(dateFormat(now, "isoDateTime")); +// 2007-06-09T17:46:21 + +// ...Or add your own +dateFormat.masks.hammerTime = 'HH:MM! "Can\'t touch this!"'; +console.log(dateFormat(now, "hammerTime")); +// 17:46! Can't touch this! + +// When using the standalone dateFormat function, +// you can also provide the date as a string +console.log(dateFormat("Jun 9 2007", "fullDate")); +// Saturday, June 9, 2007 + +// Note that if you don't include the mask argument, +// dateFormat.masks.default is used +console.log(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 +console.log(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 +console.log(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): +console.log(dateFormat(now, "longTime", true)); +// 10:46:21 PM UTC + +// ...Or add the prefix "UTC:" to your mask. +console.log(dateFormat(now, "UTC:h:MM:ss TT Z")); +// 10:46:21 PM UTC + diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js new file mode 100644 index 00000000..07780fa8 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_dayofweek.js @@ -0,0 +1,10 @@ +var dateFormat = require('./../lib/dateformat'), + assert = require('assert'); + +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.equal(N,dow); + console.log('The ISO-8601 numeric representation of the day "' + date.toString() + '" is ' + N); +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.js new file mode 100644 index 00000000..d1ddbe81 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/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-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/test_weekofyear.sh new file mode 100644 index 00000000..3c3e69b3 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/dateformat/test/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-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/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-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md new file mode 100644 index 00000000..d362e36d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/README.md @@ -0,0 +1,15 @@ +# lodash._reinterpolate v2.4.1 + +The internal [Lo-Dash](http://lodash.com/) variable `reInterpolate` 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-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js new file mode 100644 index 00000000..0bf92a5c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/index.js @@ -0,0 +1,13 @@ +/** + * 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> + */ + +/** Used to match "interpolate" template delimiters */ +var reInterpolate = /<%=([\s\S]+?)%>/g; + +module.exports = reInterpolate; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json new file mode 100644 index 00000000..85f64e7b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash._reinterpolate/package.json @@ -0,0 +1,45 @@ +{ + "name": "lodash._reinterpolate", + "version": "2.4.1", + "description": "The internal Lo-Dash variable `reInterpolate` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "readme": "# lodash._reinterpolate v2.4.1\n\nThe internal [Lo-Dash](http://lodash.com/) variable `reInterpolate` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash._reinterpolate@2.4.1", + "_from": "lodash._reinterpolate@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/README.md new file mode 100644 index 00000000..e89bd0db --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/index.js new file mode 100644 index 00000000..230f8ee8 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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><script></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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md new file mode 100644 index 00000000..6191a196 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/README.md @@ -0,0 +1,15 @@ +# lodash._escapestringchar v2.4.1 + +The internal [Lo-Dash](http://lodash.com/) function `escapeStringChar` 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js new file mode 100644 index 00000000..f3b8c438 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/index.js @@ -0,0 +1,33 @@ +/** + * 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> + */ + +/** Used to escape characters for inclusion in compiled string literals */ +var stringEscapes = { + '\\': '\\', + "'": "'", + '\n': 'n', + '\r': 'r', + '\t': 't', + '\u2028': 'u2028', + '\u2029': 'u2029' +}; + +/** + * Used by `template` to escape characters for inclusion in compiled + * string literals. + * + * @private + * @param {string} match The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeStringChar(match) { + return '\\' + stringEscapes[match]; +} + +module.exports = escapeStringChar; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json new file mode 100644 index 00000000..600f622a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash._escapestringchar/package.json @@ -0,0 +1,45 @@ +{ + "name": "lodash._escapestringchar", + "version": "2.4.1", + "description": "The internal Lo-Dash function `escapeStringChar` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "readme": "# lodash._escapestringchar v2.4.1\n\nThe internal [Lo-Dash](http://lodash.com/) function `escapeStringChar` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash._escapestringchar@2.4.1", + "_from": "lodash._escapestringchar@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md new file mode 100644 index 00000000..da283fc4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/README.md @@ -0,0 +1,15 @@ +# lodash.defaults v2.4.1 + +The [Lo-Dash](http://lodash.com/) function [`_.defaults`](http://lodash.com/docs#defaults) 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js new file mode 100644 index 00000000..52eec906 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/index.js @@ -0,0 +1,54 @@ +/** + * 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 keys = require('lodash.keys'), + objectTypes = require('lodash._objecttypes'); + +/** + * Assigns own enumerable properties of source object(s) to the destination + * object for all destination properties that resolve to `undefined`. Once a + * property is set, additional defaults of the same property will be ignored. + * + * @static + * @memberOf _ + * @type Function + * @category Objects + * @param {Object} object The destination object. + * @param {...Object} [source] The source objects. + * @param- {Object} [guard] Allows working with `_.reduce` without using its + * `key` and `object` arguments as sources. + * @returns {Object} Returns the destination object. + * @example + * + * var object = { 'name': 'barney' }; + * _.defaults(object, { 'name': 'fred', 'employer': 'slate' }); + * // => { 'name': 'barney', 'employer': 'slate' } + */ +var defaults = function(object, source, guard) { + var index, iterable = object, result = iterable; + if (!iterable) return result; + var args = arguments, + argsIndex = 0, + argsLength = typeof guard == 'number' ? 2 : args.length; + while (++argsIndex < argsLength) { + iterable = args[argsIndex]; + if (iterable && objectTypes[typeof iterable]) { + var ownIndex = -1, + ownProps = objectTypes[typeof iterable] && keys(iterable), + length = ownProps ? ownProps.length : 0; + + while (++ownIndex < length) { + index = ownProps[ownIndex]; + if (typeof result[index] == 'undefined') result[index] = iterable[index]; + } + } + } + return result +}; + +module.exports = defaults; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md new file mode 100644 index 00000000..16de7300 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/README.md @@ -0,0 +1,15 @@ +# lodash._objecttypes v2.4.1 + +The internal [Lo-Dash](http://lodash.com/) variable `objectTypes` 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js new file mode 100644 index 00000000..da17c6cd --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/index.js @@ -0,0 +1,20 @@ +/** + * 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> + */ + +/** Used to determine if values are of the language type Object */ +var objectTypes = { + 'boolean': false, + 'function': true, + 'object': true, + 'number': false, + 'string': false, + 'undefined': false +}; + +module.exports = objectTypes; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json new file mode 100644 index 00000000..ab0f1e6d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/node_modules/lodash._objecttypes/package.json @@ -0,0 +1,45 @@ +{ + "name": "lodash._objecttypes", + "version": "2.4.1", + "description": "The internal Lo-Dash variable `objectTypes` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "readme": "# lodash._objecttypes v2.4.1\n\nThe internal [Lo-Dash](http://lodash.com/) variable `objectTypes` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash._objecttypes@2.4.1", + "_from": "lodash._objecttypes@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json new file mode 100644 index 00000000..53559bd9 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.defaults/package.json @@ -0,0 +1,56 @@ +{ + "name": "lodash.defaults", + "version": "2.4.1", + "description": "The Lo-Dash function `_.defaults` 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": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "dependencies": { + "lodash.keys": "~2.4.1", + "lodash._objecttypes": "~2.4.1" + }, + "readme": "# lodash.defaults v2.4.1\n\nThe [Lo-Dash](http://lodash.com/) function [`_.defaults`](http://lodash.com/docs#defaults) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash.defaults@2.4.1", + "_from": "lodash.defaults@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md new file mode 100644 index 00000000..7cbc6538 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/README.md @@ -0,0 +1,15 @@ +# lodash.escape v2.4.1 + +The [Lo-Dash](http://lodash.com/) function [`_.escape`](http://lodash.com/docs#escape) 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js new file mode 100644 index 00000000..343a4156 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/index.js @@ -0,0 +1,31 @@ +/** + * 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 escapeHtmlChar = require('lodash._escapehtmlchar'), + keys = require('lodash.keys'), + reUnescapedHtml = require('lodash._reunescapedhtml'); + +/** + * Converts the characters `&`, `<`, `>`, `"`, and `'` in `string` to their + * corresponding HTML entities. + * + * @static + * @memberOf _ + * @category Utilities + * @param {string} string The string to escape. + * @returns {string} Returns the escaped string. + * @example + * + * _.escape('Fred, Wilma, & Pebbles'); + * // => 'Fred, Wilma, & Pebbles' + */ +function escape(string) { + return string == null ? '' : String(string).replace(reUnescapedHtml, escapeHtmlChar); +} + +module.exports = escape; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md new file mode 100644 index 00000000..eef7f9c6 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/README.md @@ -0,0 +1,15 @@ +# lodash._escapehtmlchar v2.4.1 + +The internal [Lo-Dash](http://lodash.com/) function `escapeHtmlChar` 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js new file mode 100644 index 00000000..ce4e6d8e --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/index.js @@ -0,0 +1,22 @@ +/** + * 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 htmlEscapes = require('lodash._htmlescapes'); + +/** + * Used by `escape` to convert characters to HTML entities. + * + * @private + * @param {string} match The matched character to escape. + * @returns {string} Returns the escaped character. + */ +function escapeHtmlChar(match) { + return htmlEscapes[match]; +} + +module.exports = escapeHtmlChar; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md new file mode 100644 index 00000000..9957cefa --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/README.md @@ -0,0 +1,15 @@ +# lodash._htmlescapes v2.4.1 + +The internal [Lo-Dash](http://lodash.com/) variable `htmlEscapes` 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js new file mode 100644 index 00000000..f69503d4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/index.js @@ -0,0 +1,26 @@ +/** + * 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> + */ + +/** + * Used to convert characters to HTML entities: + * + * Though the `>` character is escaped for symmetry, characters like `>` and `/` + * don't require escaping in HTML and have no special meaning unless they're part + * of a tag or an unquoted attribute value. + * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact") + */ +var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; + +module.exports = htmlEscapes; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json new file mode 100644 index 00000000..29c83d94 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/node_modules/lodash._htmlescapes/package.json @@ -0,0 +1,45 @@ +{ + "name": "lodash._htmlescapes", + "version": "2.4.1", + "description": "The internal Lo-Dash variable `htmlEscapes` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "readme": "# lodash._htmlescapes v2.4.1\n\nThe internal [Lo-Dash](http://lodash.com/) variable `htmlEscapes` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash._htmlescapes@2.4.1", + "_from": "lodash._htmlescapes@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json new file mode 100644 index 00000000..00c07f7b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._escapehtmlchar/package.json @@ -0,0 +1,48 @@ +{ + "name": "lodash._escapehtmlchar", + "version": "2.4.1", + "description": "The internal Lo-Dash function `escapeHtmlChar` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "dependencies": { + "lodash._htmlescapes": "~2.4.1" + }, + "readme": "# lodash._escapehtmlchar v2.4.1\n\nThe internal [Lo-Dash](http://lodash.com/) function `escapeHtmlChar` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash._escapehtmlchar@2.4.1", + "_from": "lodash._escapehtmlchar@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md new file mode 100644 index 00000000..c6ca90c4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/README.md @@ -0,0 +1,15 @@ +# lodash._reunescapedhtml v2.4.1 + +The internal [Lo-Dash](http://lodash.com/) variable `reUnescapedHtml` 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js new file mode 100644 index 00000000..fa870474 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/index.js @@ -0,0 +1,15 @@ +/** + * 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 htmlEscapes = require('lodash._htmlescapes'), + keys = require('lodash.keys'); + +/** Used to match HTML entities and HTML characters */ +var reUnescapedHtml = RegExp('[' + keys(htmlEscapes).join('') + ']', 'g'); + +module.exports = reUnescapedHtml; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md new file mode 100644 index 00000000..9957cefa --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/README.md @@ -0,0 +1,15 @@ +# lodash._htmlescapes v2.4.1 + +The internal [Lo-Dash](http://lodash.com/) variable `htmlEscapes` 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js new file mode 100644 index 00000000..f69503d4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/index.js @@ -0,0 +1,26 @@ +/** + * 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> + */ + +/** + * Used to convert characters to HTML entities: + * + * Though the `>` character is escaped for symmetry, characters like `>` and `/` + * don't require escaping in HTML and have no special meaning unless they're part + * of a tag or an unquoted attribute value. + * http://mathiasbynens.be/notes/ambiguous-ampersands (under "semi-related fun fact") + */ +var htmlEscapes = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''' +}; + +module.exports = htmlEscapes; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json new file mode 100644 index 00000000..29c83d94 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/node_modules/lodash._htmlescapes/package.json @@ -0,0 +1,45 @@ +{ + "name": "lodash._htmlescapes", + "version": "2.4.1", + "description": "The internal Lo-Dash variable `htmlEscapes` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "readme": "# lodash._htmlescapes v2.4.1\n\nThe internal [Lo-Dash](http://lodash.com/) variable `htmlEscapes` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash._htmlescapes@2.4.1", + "_from": "lodash._htmlescapes@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json new file mode 100644 index 00000000..74a4f272 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/node_modules/lodash._reunescapedhtml/package.json @@ -0,0 +1,49 @@ +{ + "name": "lodash._reunescapedhtml", + "version": "2.4.1", + "description": "The internal Lo-Dash variable `reUnescapedHtml` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "dependencies": { + "lodash._htmlescapes": "~2.4.1", + "lodash.keys": "~2.4.1" + }, + "readme": "# lodash._reunescapedhtml v2.4.1\n\nThe internal [Lo-Dash](http://lodash.com/) variable `reUnescapedHtml` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash._reunescapedhtml@2.4.1", + "_from": "lodash._reunescapedhtml@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json new file mode 100644 index 00000000..254ecb1e --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.escape/package.json @@ -0,0 +1,57 @@ +{ + "name": "lodash.escape", + "version": "2.4.1", + "description": "The Lo-Dash function `_.escape` 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": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "dependencies": { + "lodash._escapehtmlchar": "~2.4.1", + "lodash.keys": "~2.4.1", + "lodash._reunescapedhtml": "~2.4.1" + }, + "readme": "# lodash.escape v2.4.1\n\nThe [Lo-Dash](http://lodash.com/) function [`_.escape`](http://lodash.com/docs#escape) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash.escape@2.4.1", + "_from": "lodash.escape@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md new file mode 100644 index 00000000..bee29a8d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/README.md @@ -0,0 +1,15 @@ +# lodash.keys v2.4.1 + +The [Lo-Dash](http://lodash.com/) function [`_.keys`](http://lodash.com/docs#keys) 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js new file mode 100644 index 00000000..139568a2 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/index.js @@ -0,0 +1,36 @@ +/** + * 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 isNative = require('lodash._isnative'), + isObject = require('lodash.isobject'), + shimKeys = require('lodash._shimkeys'); + +/* Native method shortcuts for methods with the same name as other `lodash` methods */ +var nativeKeys = isNative(nativeKeys = Object.keys) && nativeKeys; + +/** + * Creates an array composed of the own enumerable property names of an object. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to inspect. + * @returns {Array} Returns an array of property names. + * @example + * + * _.keys({ 'one': 1, 'two': 2, 'three': 3 }); + * // => ['one', 'two', 'three'] (property order is not guaranteed across environments) + */ +var keys = !nativeKeys ? shimKeys : function(object) { + if (!isObject(object)) { + return []; + } + return nativeKeys(object); +}; + +module.exports = keys; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md new file mode 100644 index 00000000..fbcaad2f --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/README.md @@ -0,0 +1,15 @@ +# lodash._isnative v2.4.1 + +The internal [Lo-Dash](http://lodash.com/) function `isNative` 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js new file mode 100644 index 00000000..b34a3500 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/index.js @@ -0,0 +1,34 @@ +/** + * 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> + */ + +/** Used for native method references */ +var objectProto = Object.prototype; + +/** Used to resolve the internal [[Class]] of values */ +var toString = objectProto.toString; + +/** Used to detect if a method is native */ +var reNative = RegExp('^' + + String(toString) + .replace(/[.*+?^${}()|[\]\\]/g, '\\$&') + .replace(/toString| for [^\]]+/g, '.*?') + '$' +); + +/** + * Checks if `value` is a native function. + * + * @private + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is a native function, else `false`. + */ +function isNative(value) { + return typeof value == 'function' && reNative.test(value); +} + +module.exports = isNative; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json new file mode 100644 index 00000000..5e652af4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._isnative/package.json @@ -0,0 +1,45 @@ +{ + "name": "lodash._isnative", + "version": "2.4.1", + "description": "The internal Lo-Dash function `isNative` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "readme": "# lodash._isnative v2.4.1\n\nThe internal [Lo-Dash](http://lodash.com/) function `isNative` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash._isnative@2.4.1", + "_from": "lodash._isnative@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md new file mode 100644 index 00000000..23f3000b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/README.md @@ -0,0 +1,15 @@ +# lodash._shimkeys v2.4.1 + +The internal [Lo-Dash](http://lodash.com/) function `shimKeys` 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js new file mode 100644 index 00000000..12be0bf1 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/index.js @@ -0,0 +1,38 @@ +/** + * 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 objectTypes = require('lodash._objecttypes'); + +/** Used for native method references */ +var objectProto = Object.prototype; + +/** Native method shortcuts */ +var hasOwnProperty = objectProto.hasOwnProperty; + +/** + * A fallback implementation of `Object.keys` which produces an array of the + * given object's own enumerable property names. + * + * @private + * @type Function + * @param {Object} object The object to inspect. + * @returns {Array} Returns an array of property names. + */ +var shimKeys = function(object) { + var index, iterable = object, result = []; + if (!iterable) return result; + if (!(objectTypes[typeof object])) return result; + for (index in iterable) { + if (hasOwnProperty.call(iterable, index)) { + result.push(index); + } + } + return result +}; + +module.exports = shimKeys; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md new file mode 100644 index 00000000..16de7300 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/README.md @@ -0,0 +1,15 @@ +# lodash._objecttypes v2.4.1 + +The internal [Lo-Dash](http://lodash.com/) variable `objectTypes` 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js new file mode 100644 index 00000000..da17c6cd --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/index.js @@ -0,0 +1,20 @@ +/** + * 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> + */ + +/** Used to determine if values are of the language type Object */ +var objectTypes = { + 'boolean': false, + 'function': true, + 'object': true, + 'number': false, + 'string': false, + 'undefined': false +}; + +module.exports = objectTypes; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json new file mode 100644 index 00000000..21b0fd84 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/node_modules/lodash._objecttypes/package.json @@ -0,0 +1,46 @@ +{ + "name": "lodash._objecttypes", + "version": "2.4.1", + "description": "The internal Lo-Dash variable `objectTypes` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "readme": "# lodash._objecttypes v2.4.1\n\nThe internal [Lo-Dash](http://lodash.com/) variable `objectTypes` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash._objecttypes@2.4.1", + "_from": "lodash._objecttypes@~2.4.1", + "scripts": {} +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json new file mode 100644 index 00000000..a51388c1 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash._shimkeys/package.json @@ -0,0 +1,48 @@ +{ + "name": "lodash._shimkeys", + "version": "2.4.1", + "description": "The internal Lo-Dash function `shimKeys` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "dependencies": { + "lodash._objecttypes": "~2.4.1" + }, + "readme": "# lodash._shimkeys v2.4.1\n\nThe internal [Lo-Dash](http://lodash.com/) function `shimKeys` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash._shimkeys@2.4.1", + "_from": "lodash._shimkeys@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md new file mode 100644 index 00000000..eeb0a78b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/README.md @@ -0,0 +1,15 @@ +# lodash.isobject v2.4.1 + +The [Lo-Dash](http://lodash.com/) function [`_.isObject`](http://lodash.com/docs#isObject) 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js new file mode 100644 index 00000000..3596ac34 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/index.js @@ -0,0 +1,39 @@ +/** + * 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 objectTypes = require('lodash._objecttypes'); + +/** + * Checks if `value` is the language type of Object. + * (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) + * + * @static + * @memberOf _ + * @category Objects + * @param {*} value The value to check. + * @returns {boolean} Returns `true` if the `value` is an object, else `false`. + * @example + * + * _.isObject({}); + * // => true + * + * _.isObject([1, 2, 3]); + * // => true + * + * _.isObject(1); + * // => false + */ +function isObject(value) { + // check if the value is the ECMAScript language type of Object + // http://es5.github.io/#x8 + // and avoid a V8 bug + // http://code.google.com/p/v8/issues/detail?id=2291 + return !!(value && objectTypes[typeof value]); +} + +module.exports = isObject; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md new file mode 100644 index 00000000..16de7300 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/README.md @@ -0,0 +1,15 @@ +# lodash._objecttypes v2.4.1 + +The internal [Lo-Dash](http://lodash.com/) variable `objectTypes` 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js new file mode 100644 index 00000000..da17c6cd --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/index.js @@ -0,0 +1,20 @@ +/** + * 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> + */ + +/** Used to determine if values are of the language type Object */ +var objectTypes = { + 'boolean': false, + 'function': true, + 'object': true, + 'number': false, + 'string': false, + 'undefined': false +}; + +module.exports = objectTypes; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json new file mode 100644 index 00000000..21b0fd84 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/node_modules/lodash._objecttypes/package.json @@ -0,0 +1,46 @@ +{ + "name": "lodash._objecttypes", + "version": "2.4.1", + "description": "The internal Lo-Dash variable `objectTypes` as a Node.js module generated by lodash-cli.", + "homepage": "http://lodash.com/custom-builds", + "license": "MIT", + "author": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "readme": "# lodash._objecttypes v2.4.1\n\nThe internal [Lo-Dash](http://lodash.com/) variable `objectTypes` as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash._objecttypes@2.4.1", + "_from": "lodash._objecttypes@~2.4.1", + "scripts": {} +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json new file mode 100644 index 00000000..698a9eaf --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/node_modules/lodash.isobject/package.json @@ -0,0 +1,55 @@ +{ + "name": "lodash.isobject", + "version": "2.4.1", + "description": "The Lo-Dash function `_.isObject` 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": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "dependencies": { + "lodash._objecttypes": "~2.4.1" + }, + "readme": "# lodash.isobject v2.4.1\n\nThe [Lo-Dash](http://lodash.com/) function [`_.isObject`](http://lodash.com/docs#isObject) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash.isobject@2.4.1", + "_from": "lodash.isobject@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json new file mode 100644 index 00000000..cd3c29bd --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.keys/package.json @@ -0,0 +1,57 @@ +{ + "name": "lodash.keys", + "version": "2.4.1", + "description": "The Lo-Dash function `_.keys` 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": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "dependencies": { + "lodash._isnative": "~2.4.1", + "lodash.isobject": "~2.4.1", + "lodash._shimkeys": "~2.4.1" + }, + "readme": "# lodash.keys v2.4.1\n\nThe [Lo-Dash](http://lodash.com/) function [`_.keys`](http://lodash.com/docs#keys) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash.keys@2.4.1", + "_from": "lodash.keys@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/README.md new file mode 100644 index 00000000..d9ce72bc --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/index.js new file mode 100644 index 00000000..bba7e231 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json new file mode 100644 index 00000000..f08cd47d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.templatesettings/package.json @@ -0,0 +1,56 @@ +{ + "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": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "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" + }, + "readme": "# lodash.templatesettings v2.4.1\n\nThe [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).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash.templatesettings@2.4.1", + "_from": "lodash.templatesettings@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/LICENSE.txt new file mode 100644 index 00000000..49869bba --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md new file mode 100644 index 00000000..33f028da --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/README.md @@ -0,0 +1,15 @@ +# lodash.values v2.4.1 + +The [Lo-Dash](http://lodash.com/) function [`_.values`](http://lodash.com/docs#values) 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-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js new file mode 100644 index 00000000..ccf622fa --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/index.js @@ -0,0 +1,36 @@ +/** + * 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 keys = require('lodash.keys'); + +/** + * Creates an array composed of the own enumerable property values of `object`. + * + * @static + * @memberOf _ + * @category Objects + * @param {Object} object The object to inspect. + * @returns {Array} Returns an array of property values. + * @example + * + * _.values({ 'one': 1, 'two': 2, 'three': 3 }); + * // => [1, 2, 3] (property order is not guaranteed across environments) + */ +function values(object) { + var index = -1, + props = keys(object), + length = props.length, + result = Array(length); + + while (++index < length) { + result[index] = object[props[index]]; + } + return result; +} + +module.exports = values; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json new file mode 100644 index 00000000..8e864ab7 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/node_modules/lodash.values/package.json @@ -0,0 +1,55 @@ +{ + "name": "lodash.values", + "version": "2.4.1", + "description": "The Lo-Dash function `_.values` 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": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "https://github.com/lodash/lodash-cli/issues" + }, + "repository": { + "type": "git", + "url": "https://github.com/lodash/lodash-cli.git" + }, + "dependencies": { + "lodash.keys": "~2.4.1" + }, + "readme": "# lodash.values v2.4.1\n\nThe [Lo-Dash](http://lodash.com/) function [`_.values`](http://lodash.com/docs#values) as a [Node.js](http://nodejs.org/) module generated by [lodash-cli](https://npmjs.org/package/lodash-cli).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash.values@2.4.1", + "_from": "lodash.values@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/package.json new file mode 100644 index 00000000..a42d1163 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/lodash.template/package.json @@ -0,0 +1,61 @@ +{ + "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": { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + "contributors": [ + { + "name": "John-David Dalton", + "email": "john.david.dalton@gmail.com", + "url": "http://allyoucanleet.com/" + }, + { + "name": "Blaine Bublitz", + "email": "blaine@iceddev.com", + "url": "http://www.iceddev.com/" + }, + { + "name": "Kit Cambridge", + "email": "github@kitcambridge.be", + "url": "http://kitcambridge.be/" + }, + { + "name": "Mathias Bynens", + "email": "mathias@qiwi.be", + "url": "http://mathiasbynens.be/" + } + ], + "bugs": { + "url": "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" + }, + "readme": "# lodash.template v2.4.1\n\nThe [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).\n\n## Author\n\n| [![twitter/jdalton](http://gravatar.com/avatar/299a3d891ff1920b69c364d061007043?s=70)](https://twitter.com/jdalton \"Follow @jdalton on Twitter\") |\n|---|\n| [John-David Dalton](http://allyoucanleet.com/) |\n\n## Contributors\n\n| [![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\") |\n|---|---|---|\n| [Blaine Bublitz](http://www.iceddev.com/) | [Kit Cambridge](http://kitcambridge.be/) | [Mathias Bynens](http://mathiasbynens.be/) |\n", + "readmeFilename": "README.md", + "_id": "lodash.template@2.4.1", + "_from": "lodash.template@~2.4.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/.travis.yml b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/.travis.yml new file mode 100644 index 00000000..cc4dba29 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/.travis.yml @@ -0,0 +1,4 @@ +language: node_js +node_js: + - "0.8" + - "0.10" diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/LICENSE b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/LICENSE new file mode 100644 index 00000000..ee27ba4b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/minimist/example/parse.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/example/parse.js new file mode 100644 index 00000000..abff3e8e --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/minimist/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/index.js new file mode 100644 index 00000000..584f551a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/index.js @@ -0,0 +1,187 @@ +module.exports = function (args, opts) { + if (!opts) opts = {}; + + var flags = { bools : {}, strings : {} }; + + [].concat(opts['boolean']).filter(Boolean).forEach(function (key) { + flags.bools[key] = true; + }); + + [].concat(opts.string).filter(Boolean).forEach(function (key) { + flags.strings[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; + })); + }); + }); + + 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] + && (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]); + }); + } + }); + + 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); +} + +function longest (xs) { + return Math.max.apply(null, xs.map(function (x) { return x.length })); +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/package.json new file mode 100644 index 00000000..6cb96be8 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/package.json @@ -0,0 +1,50 @@ +{ + "name": "minimist", + "version": "0.0.8", + "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", + "readme": "# minimist\n\nparse argument options\n\nThis module is the guts of optimist's argument parser without all the\nfanciful decoration.\n\n[![browser support](https://ci.testling.com/substack/minimist.png)](http://ci.testling.com/substack/minimist)\n\n[![build status](https://secure.travis-ci.org/substack/minimist.png)](http://travis-ci.org/substack/minimist)\n\n# example\n\n``` js\nvar argv = require('minimist')(process.argv.slice(2));\nconsole.dir(argv);\n```\n\n```\n$ node example/parse.js -a beep -b boop\n{ _: [], a: 'beep', b: 'boop' }\n```\n\n```\n$ node example/parse.js -x 3 -y 4 -n5 -abc --beep=boop foo bar baz\n{ _: [ 'foo', 'bar', 'baz' ],\n x: 3,\n y: 4,\n n: 5,\n a: true,\n b: true,\n c: true,\n beep: 'boop' }\n```\n\n# methods\n\n``` js\nvar parseArgs = require('minimist')\n```\n\n## var argv = parseArgs(args, opts={})\n\nReturn an argument object `argv` populated with the array arguments from `args`.\n\n`argv._` contains all the arguments that didn't have an option associated with\nthem.\n\nNumeric-looking arguments will be returned as numbers unless `opts.string` or\n`opts.boolean` is set for that argument name.\n\nAny arguments after `'--'` will not be parsed and will end up in `argv._`.\n\noptions can be:\n\n* `opts.string` - a string or array of strings argument names to always treat as\nstrings\n* `opts.boolean` - a string or array of strings to always treat as booleans\n* `opts.alias` - an object mapping string names to strings or arrays of string\nargument names to use as aliases\n* `opts.default` - an object mapping string argument names to default values\n\n# install\n\nWith [npm](https://npmjs.org) do:\n\n```\nnpm install minimist\n```\n\n# license\n\nMIT\n", + "readmeFilename": "readme.markdown", + "bugs": { + "url": "https://github.com/substack/minimist/issues" + }, + "_id": "minimist@0.0.8", + "_from": "minimist@~0.0.5" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/readme.markdown b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/readme.markdown new file mode 100644 index 00000000..c2563532 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/readme.markdown @@ -0,0 +1,73 @@ +# 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 string or array of strings to always treat as booleans +* `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 + +# install + +With [npm](https://npmjs.org) do: + +``` +npm install minimist +``` + +# license + +MIT diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/dash.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/dash.js new file mode 100644 index 00000000..8b034b99 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/dash.js @@ -0,0 +1,24 @@ +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' ] }); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/default_bool.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/default_bool.js new file mode 100644 index 00000000..f0041ee4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/dotted.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/dotted.js new file mode 100644 index 00000000..ef0ae349 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/dotted.js @@ -0,0 +1,16 @@ +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(); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/long.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/long.js new file mode 100644 index 00000000..5d3a1e09 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/parse.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/parse.js new file mode 100644 index 00000000..8a906466 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/parse.js @@ -0,0 +1,318 @@ +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('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('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('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('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('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(); +}); + +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-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/parse_modified.js new file mode 100644 index 00000000..21851b03 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/short.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/short.js new file mode 100644 index 00000000..d513a1c2 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/whitespace.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/minimist/test/whitespace.js new file mode 100644 index 00000000..8a52a58c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/multipipe/.npmignore b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/.npmignore new file mode 100644 index 00000000..3c3629e6 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/.travis.yml b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/.travis.yml new file mode 100644 index 00000000..6e5919de --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "0.10" diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/History.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/History.md new file mode 100644 index 00000000..da69e925 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/History.md @@ -0,0 +1,15 @@ + +0.0.2 / 2014-02-20 +================== + + * fix infinite loop + +0.0.1 / 2014-01-15 +================== + +* fix error bubbling + +0.0.0 / 2014-01-13 +================== + +* initial release diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/Makefile b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/Makefile new file mode 100644 index 00000000..d1df0ab3 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/Makefile @@ -0,0 +1,10 @@ + +node_modules: package.json + @npm install + +test: + @./node_modules/.bin/mocha \ + --reporter spec \ + --timeout 100 + +.PHONY: test \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/Readme.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/Readme.md new file mode 100644 index 00000000..e8f432ec --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/Readme.md @@ -0,0 +1,74 @@ +# multipipe + +A better `Stream#pipe` that creates duplex streams and lets you handle errors in one place. + +[![build status](https://secure.travis-ci.org/segmentio/multipipe.png)](http://travis-ci.org/segmentio/multipipe) + +## Example + +```js +var pipe = require('multipipe'); + +// pipe streams +var stream = pipe(streamA, streamB, streamC); + +// centralized error handling +stream.on('error', fn); + +// creates a new stream +source.pipe(stream).pipe(dest); +``` + +## Duplex streams + + Write to the pipe and you'll really write to the first stream, read from the pipe and you'll read from the last stream. + +```js +var stream = pipe(a, b, c); + +source + .pipe(stream) + .pipe(destination); +``` + + In this example the flow of data is: + + * source -> + * a -> + * b -> + * c -> + * destination + +## Error handling + + Each `pipe` forwards the errors the streams it wraps emit, so you have one central place to handle errors: + +```js +var stream = pipe(a, b, c); + +stream.on('error', function(err){ + // called three times +}); + +a.emit('error', new Error); +b.emit('error', new Error); +c.emit('error', new Error); +``` + +## API + +### pipe(stream, ...) + +Pass a variable number of streams and each will be piped to the next one. + +A stream will be returned that wraps passed in streams in a way that errors will be forwarded and you can write to and/or read from it. + +## Installation + +```bash +$ npm install multipipe +``` + +## License + + MIT diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/index.js new file mode 100644 index 00000000..1fefb4a4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/index.js @@ -0,0 +1,57 @@ + +/** + * Module dependencies. + */ + +var duplexer = require('duplexer2'); +var Stream = require('stream'); + +/** + * Slice reference. + */ + +var slice = [].slice; + +/** + * Duplexer options. + */ + +var opts = { + bubbleErrors: false +}; + +/** + * Expose `pipe`. + */ + +module.exports = pipe; + +/** + * Pipe. + * + * @param {Stream,...} + * @return {Stream} + * @api public + */ + +function pipe(){ + if (arguments.length == 1) return arguments[0]; + var streams = slice.call(arguments); + var first = streams[0]; + var last = streams[streams.length - 1]; + var ret; + + if (first.writable && last.readable) ret = duplexer(opts, first, last); + else if (first.writable) ret = first; + else if (last.readable) ret = last; + else ret = new Stream; + + streams.forEach(function(stream, i){ + var next = streams[i+1]; + if (next) stream.pipe(next); + if (stream != ret) stream.on('error', ret.emit.bind(ret, 'error')); + }); + + return ret; +} + diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore new file mode 100644 index 00000000..07e6e472 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.npmignore @@ -0,0 +1 @@ +/node_modules diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml new file mode 100644 index 00000000..6e5919de --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/.travis.yml @@ -0,0 +1,3 @@ +language: node_js +node_js: + - "0.10" diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md new file mode 100644 index 00000000..547189a6 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/LICENSE.md @@ -0,0 +1,26 @@ +Copyright (c) 2013, Deoxxa Development +====================================== +All rights reserved. +-------------------- + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions are met: +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. +3. Neither the name of Deoxxa Development nor the names of its contributors + may be used to endorse or promote products derived from this software + without specific prior written permission. + +THIS SOFTWARE IS PROVIDED BY DEOXXA DEVELOPMENT ''AS IS'' AND ANY +EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +DISCLAIMED. IN NO EVENT SHALL DEOXXA DEVELOPMENT BE LIABLE FOR ANY +DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND +ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md new file mode 100644 index 00000000..e39e1e9e --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/README.md @@ -0,0 +1,129 @@ +duplexer2 [![build status](https://travis-ci.org/deoxxa/duplexer2.png)](https://travis-ci.org/deoxxa/fork) +========= + +Like duplexer (http://npm.im/duplexer) but using streams2. + +Overview +-------- + +duplexer2 is a reimplementation of [duplexer](http://npm.im/duplexer) using the +readable-stream API which is standard in node as of v0.10. Everything largely +works the same. + +Installation +------------ + +Available via [npm](http://npmjs.org/): + +> $ npm install duplexer2 + +Or via git: + +> $ git clone git://github.com/deoxxa/duplexer2.git node_modules/duplexer2 + +API +--- + +**duplexer2** + +Creates a new `DuplexWrapper` object, which is the actual class that implements +most of the fun stuff. All that fun stuff is hidden. DON'T LOOK. + +```javascript +duplexer2([options], writable, readable) +``` + +```javascript +var duplex = duplexer2(new stream.Writable(), new stream.Readable()); +``` + +Arguments + +* __options__ - an object specifying the regular `stream.Duplex` options, as + well as the properties described below. +* __writable__ - a writable stream +* __readable__ - a readable stream + +Options + +* __bubbleErrors__ - a boolean value that specifies whether to bubble errors + from the underlying readable/writable streams. Default is `true`. + +Example +------- + +Also see [example.js](https://github.com/deoxxa/duplexer2/blob/master/example.js). + +Code: + +```javascript +var stream = require("stream"); + +var duplexer2 = require("duplexer2"); + +var writable = new stream.Writable({objectMode: true}), + readable = new stream.Readable({objectMode: true}); + +writable._write = function _write(input, encoding, done) { + if (readable.push(input)) { + return done(); + } else { + readable.once("drain", done); + } +}; + +readable._read = function _read(n) { + // no-op +}; + +// simulate the readable thing closing after a bit +writable.once("finish", function() { + setTimeout(function() { + readable.push(null); + }, 500); +}); + +var duplex = duplexer2(writable, readable); + +duplex.on("data", function(e) { + console.log("got data", JSON.stringify(e)); +}); + +duplex.on("finish", function() { + console.log("got finish event"); +}); + +duplex.on("end", function() { + console.log("got end event"); +}); + +duplex.write("oh, hi there", function() { + console.log("finished writing"); +}); + +duplex.end(function() { + console.log("finished ending"); +}); +``` + +Output: + +``` +got data "oh, hi there" +finished writing +got finish event +finished ending +got end event +``` + +License +------- + +3-clause BSD. A copy is included with the source. + +Contact +------- + +* GitHub ([deoxxa](http://github.com/deoxxa)) +* Twitter ([@deoxxa](http://twitter.com/deoxxa)) +* Email ([deoxxa@fknsrs.biz](mailto:deoxxa@fknsrs.biz)) diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js new file mode 100755 index 00000000..ad537a04 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/example.js @@ -0,0 +1,49 @@ +#!/usr/bin/env node + +var stream = require("stream"); + +var duplexer2 = require("./"); + +var writable = new stream.Writable({objectMode: true}), + readable = new stream.Readable({objectMode: true}); + +writable._write = function _write(input, encoding, done) { + if (readable.push(input)) { + return done(); + } else { + readable.once("drain", done); + } +}; + +readable._read = function _read(n) { + // no-op +}; + +// simulate the readable thing closing after a bit +writable.once("finish", function() { + setTimeout(function() { + readable.push(null); + }, 500); +}); + +var duplex = duplexer2(writable, readable); + +duplex.on("data", function(e) { + console.log("got data", JSON.stringify(e)); +}); + +duplex.on("finish", function() { + console.log("got finish event"); +}); + +duplex.on("end", function() { + console.log("got end event"); +}); + +duplex.write("oh, hi there", function() { + console.log("finished writing"); +}); + +duplex.end(function() { + console.log("finished ending"); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js new file mode 100644 index 00000000..90b261b4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/index.js @@ -0,0 +1,62 @@ +var stream = require("stream"); + +var duplex2 = module.exports = function duplex2(options, writable, readable) { + return new DuplexWrapper(options, writable, readable); +}; + +var DuplexWrapper = exports.DuplexWrapper = function DuplexWrapper(options, writable, readable) { + if (typeof readable === "undefined") { + readable = writable; + writable = options; + options = null; + } + + options = options || {}; + options.objectMode = true; + + stream.Duplex.call(this, options); + + this._bubbleErrors = (typeof options.bubbleErrors === "undefined") || !!options.bubbleErrors; + + this._writable = writable; + this._readable = readable; + + var self = this; + + writable.once("finish", function() { + self.end(); + }); + + this.once("finish", function() { + writable.end(); + }); + + readable.on("data", function(e) { + if (!self.push(e)) { + readable.pause(); + } + }); + + readable.once("end", function() { + return self.push(null); + }); + + if (this._bubbleErrors) { + writable.on("error", function(err) { + return self.emit("error", err); + }); + + readable.on("error", function(err) { + return self.emit("error", err); + }); + } +}; +DuplexWrapper.prototype = Object.create(stream.Duplex.prototype, {constructor: {value: DuplexWrapper}}); + +DuplexWrapper.prototype._write = function _write(input, encoding, done) { + this._writable.write(input, encoding, done); +}; + +DuplexWrapper.prototype._read = function _read(n) { + this._readable.resume(); +}; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json new file mode 100644 index 00000000..1949be68 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/package.json @@ -0,0 +1,37 @@ +{ + "name": "duplexer2", + "version": "0.0.1", + "description": "Like duplexer (http://npm.im/duplexer) but using streams2", + "main": "index.js", + "scripts": { + "test": "mocha -R tap" + }, + "repository": { + "type": "git", + "url": "git://github.com/deoxxa/duplexer2.git" + }, + "keywords": [ + "duplex", + "stream", + "join", + "combine" + ], + "author": { + "name": "Conrad Pankoff", + "email": "deoxxa@fknsrs.biz", + "url": "http://www.fknsrs.biz/" + }, + "license": "BSD", + "bugs": { + "url": "https://github.com/deoxxa/duplexer2/issues" + }, + "devDependencies": { + "chai": "~1.7.2", + "mocha": "~1.12.1" + }, + "readme": "duplexer2 [![build status](https://travis-ci.org/deoxxa/duplexer2.png)](https://travis-ci.org/deoxxa/fork)\n=========\n\nLike duplexer (http://npm.im/duplexer) but using streams2.\n\nOverview\n--------\n\nduplexer2 is a reimplementation of [duplexer](http://npm.im/duplexer) using the\nreadable-stream API which is standard in node as of v0.10. Everything largely\nworks the same.\n\nInstallation\n------------\n\nAvailable via [npm](http://npmjs.org/):\n\n> $ npm install duplexer2\n\nOr via git:\n\n> $ git clone git://github.com/deoxxa/duplexer2.git node_modules/duplexer2\n\nAPI\n---\n\n**duplexer2**\n\nCreates a new `DuplexWrapper` object, which is the actual class that implements\nmost of the fun stuff. All that fun stuff is hidden. DON'T LOOK.\n\n```javascript\nduplexer2([options], writable, readable)\n```\n\n```javascript\nvar duplex = duplexer2(new stream.Writable(), new stream.Readable());\n```\n\nArguments\n\n* __options__ - an object specifying the regular `stream.Duplex` options, as\n well as the properties described below.\n* __writable__ - a writable stream\n* __readable__ - a readable stream\n\nOptions\n\n* __bubbleErrors__ - a boolean value that specifies whether to bubble errors\n from the underlying readable/writable streams. Default is `true`.\n\nExample\n-------\n\nAlso see [example.js](https://github.com/deoxxa/duplexer2/blob/master/example.js).\n\nCode:\n\n```javascript\nvar stream = require(\"stream\");\n\nvar duplexer2 = require(\"duplexer2\");\n\nvar writable = new stream.Writable({objectMode: true}),\n readable = new stream.Readable({objectMode: true});\n\nwritable._write = function _write(input, encoding, done) {\n if (readable.push(input)) {\n return done();\n } else {\n readable.once(\"drain\", done);\n }\n};\n\nreadable._read = function _read(n) {\n // no-op\n};\n\n// simulate the readable thing closing after a bit\nwritable.once(\"finish\", function() {\n setTimeout(function() {\n readable.push(null);\n }, 500);\n});\n\nvar duplex = duplexer2(writable, readable);\n\nduplex.on(\"data\", function(e) {\n console.log(\"got data\", JSON.stringify(e));\n});\n\nduplex.on(\"finish\", function() {\n console.log(\"got finish event\");\n});\n\nduplex.on(\"end\", function() {\n console.log(\"got end event\");\n});\n\nduplex.write(\"oh, hi there\", function() {\n console.log(\"finished writing\");\n});\n\nduplex.end(function() {\n console.log(\"finished ending\");\n});\n```\n\nOutput:\n\n```\ngot data \"oh, hi there\"\nfinished writing\ngot finish event\nfinished ending\ngot end event\n```\n\nLicense\n-------\n\n3-clause BSD. A copy is included with the source.\n\nContact\n-------\n\n* GitHub ([deoxxa](http://github.com/deoxxa))\n* Twitter ([@deoxxa](http://twitter.com/deoxxa))\n* Email ([deoxxa@fknsrs.biz](mailto:deoxxa@fknsrs.biz))\n", + "readmeFilename": "README.md", + "homepage": "https://github.com/deoxxa/duplexer2", + "_id": "duplexer2@0.0.1", + "_from": "duplexer2@0.0.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js new file mode 100644 index 00000000..fe3b2560 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/node_modules/duplexer2/test/tests.js @@ -0,0 +1,161 @@ +var assert = require("chai").assert; + +var stream = require("stream"); + +var duplexer2 = require("../"); + +describe("duplexer2", function() { + var writable, readable; + + beforeEach(function() { + writable = new stream.Writable({objectMode: true}); + readable = new stream.Readable({objectMode: true}); + + writable._write = function _write(input, encoding, done) { + return done(); + }; + + readable._read = function _read(n) { + }; + }); + + it("should interact with the writable stream properly for writing", function(done) { + var duplex = duplexer2(writable, readable); + + writable._write = function _write(input, encoding, _done) { + assert.strictEqual(input, "well hello there"); + + return done(); + }; + + duplex.write("well hello there"); + }); + + it("should interact with the readable stream properly for reading", function(done) { + var duplex = duplexer2(writable, readable); + + duplex.on("data", function(e) { + assert.strictEqual(e, "well hello there"); + + return done(); + }); + + readable.push("well hello there"); + }); + + it("should end the writable stream, causing it to finish", function(done) { + var duplex = duplexer2(writable, readable); + + writable.once("finish", done); + + duplex.end(); + }); + + it("should finish when the writable stream finishes", function(done) { + var duplex = duplexer2(writable, readable); + + duplex.once("finish", done); + + writable.end(); + }); + + it("should end when the readable stream ends", function(done) { + var duplex = duplexer2(writable, readable); + + // required to let "end" fire without reading + duplex.resume(); + duplex.once("end", done); + + readable.push(null); + }); + + it("should bubble errors from the writable stream when no behaviour is specified", function(done) { + var duplex = duplexer2(writable, readable); + + var originalErr = Error("testing"); + + duplex.on("error", function(err) { + assert.strictEqual(err, originalErr); + + return done(); + }); + + writable.emit("error", originalErr); + }); + + it("should bubble errors from the readable stream when no behaviour is specified", function(done) { + var duplex = duplexer2(writable, readable); + + var originalErr = Error("testing"); + + duplex.on("error", function(err) { + assert.strictEqual(err, originalErr); + + return done(); + }); + + readable.emit("error", originalErr); + }); + + it("should bubble errors from the writable stream when bubbleErrors is true", function(done) { + var duplex = duplexer2({bubbleErrors: true}, writable, readable); + + var originalErr = Error("testing"); + + duplex.on("error", function(err) { + assert.strictEqual(err, originalErr); + + return done(); + }); + + writable.emit("error", originalErr); + }); + + it("should bubble errors from the readable stream when bubbleErrors is true", function(done) { + var duplex = duplexer2({bubbleErrors: true}, writable, readable); + + var originalErr = Error("testing"); + + duplex.on("error", function(err) { + assert.strictEqual(err, originalErr); + + return done(); + }); + + readable.emit("error", originalErr); + }); + + it("should not bubble errors from the writable stream when bubbleErrors is false", function(done) { + var duplex = duplexer2({bubbleErrors: false}, writable, readable); + + var timeout = setTimeout(done, 25); + + duplex.on("error", function(err) { + clearTimeout(timeout); + + return done(Error("shouldn't bubble error")); + }); + + // prevent uncaught error exception + writable.on("error", function() {}); + + writable.emit("error", Error("testing")); + }); + + it("should not bubble errors from the readable stream when bubbleErrors is false", function(done) { + var duplex = duplexer2({bubbleErrors: false}, writable, readable); + + var timeout = setTimeout(done, 25); + + duplex.on("error", function(err) { + clearTimeout(timeout); + + return done(Error("shouldn't bubble error")); + }); + + // prevent uncaught error exception + readable.on("error", function() {}); + + readable.emit("error", Error("testing")); + }); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/package.json new file mode 100644 index 00000000..10d6dd98 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/package.json @@ -0,0 +1,26 @@ +{ + "name": "multipipe", + "version": "0.0.2", + "description": "pipe streams with centralized error handling", + "repository": { + "type": "git", + "url": "git://github.com/segmentio/multipipe" + }, + "dependencies": { + "duplexer2": "0.0.1" + }, + "devDependencies": { + "mocha": "~1.17.0" + }, + "scripts": { + "test": "make test" + }, + "readme": "# multipipe\n\nA better `Stream#pipe` that creates duplex streams and lets you handle errors in one place.\n\n[![build status](https://secure.travis-ci.org/segmentio/multipipe.png)](http://travis-ci.org/segmentio/multipipe)\n\n## Example\n\n```js\nvar pipe = require('multipipe');\n\n// pipe streams\nvar stream = pipe(streamA, streamB, streamC);\n\n// centralized error handling\nstream.on('error', fn);\n\n// creates a new stream\nsource.pipe(stream).pipe(dest);\n```\n\n## Duplex streams\n\n Write to the pipe and you'll really write to the first stream, read from the pipe and you'll read from the last stream.\n\n```js\nvar stream = pipe(a, b, c);\n\nsource\n .pipe(stream)\n .pipe(destination);\n```\n\n In this example the flow of data is:\n\n * source ->\n * a ->\n * b ->\n * c ->\n * destination\n\n## Error handling\n\n Each `pipe` forwards the errors the streams it wraps emit, so you have one central place to handle errors:\n\n```js\nvar stream = pipe(a, b, c);\n\nstream.on('error', function(err){\n // called three times\n});\n\na.emit('error', new Error);\nb.emit('error', new Error);\nc.emit('error', new Error);\n```\n\n## API\n\n### pipe(stream, ...)\n\nPass a variable number of streams and each will be piped to the next one.\n\nA stream will be returned that wraps passed in streams in a way that errors will be forwarded and you can write to and/or read from it.\n\n## Installation\n\n```bash\n$ npm install multipipe\n```\n\n## License\n\n MIT\n", + "readmeFilename": "Readme.md", + "bugs": { + "url": "https://github.com/segmentio/multipipe/issues" + }, + "homepage": "https://github.com/segmentio/multipipe", + "_id": "multipipe@0.0.2", + "_from": "multipipe@~0.0.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js new file mode 100644 index 00000000..9d276510 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/multipipe/test/multipipe.js @@ -0,0 +1,108 @@ +var assert = require('assert'); +var pipe = require('..'); +var Stream = require('stream'); + +describe('pipe(a)', function(){ + it('should return a', function(){ + var readable = Readable(); + var stream = pipe(readable); + assert.equal(stream, readable); + }); +}); + +describe('pipe(a, b, c)', function(){ + it('should pipe internally', function(done){ + pipe(Readable(), Transform(), Writable(done)); + }); + + it('should be writable', function(done){ + var stream = pipe(Transform(), Writable(done)); + assert(stream.writable); + Readable().pipe(stream); + }); + + it('should be readable', function(done){ + var stream = pipe(Readable(), Transform()); + assert(stream.readable); + stream.pipe(Writable(done)); + }); + + it('should be readable and writable', function(done){ + var stream = pipe(Transform(), Transform()); + assert(stream.readable); + assert(stream.writable); + Readable() + .pipe(stream) + .pipe(Writable(done)); + }); + + describe('errors', function(){ + it('should reemit', function(done){ + var a = Transform(); + var b = Transform(); + var c = Transform(); + var stream = pipe(a, b, c); + var err = new Error; + var i = 0; + + stream.on('error', function(_err){ + i++; + assert.equal(_err, err); + assert(i <= 3); + if (i == 3) done(); + }); + + a.emit('error', err); + b.emit('error', err); + c.emit('error', err); + }); + + it('should not reemit endlessly', function(done){ + var a = Transform(); + var b = Transform(); + var c = Transform(); + c.readable = false; + var stream = pipe(a, b, c); + var err = new Error; + var i = 0; + + stream.on('error', function(_err){ + i++; + assert.equal(_err, err); + assert(i <= 3); + if (i == 3) done(); + }); + + a.emit('error', err); + b.emit('error', err); + c.emit('error', err); + }); + }); +}); + +function Readable(){ + var readable = new Stream.Readable({ objectMode: true }); + readable._read = function(){ + this.push('a'); + this.push(null); + }; + return readable; +} + +function Transform(){ + var transform = new Stream.Transform({ objectMode: true }); + transform._transform = function(chunk, _, done){ + done(null, chunk.toUpperCase()); + }; + return transform; +} + +function Writable(cb){ + var writable = new Stream.Writable({ objectMode: true }); + writable._write = function(chunk, _, done){ + assert.equal(chunk, 'A'); + done(); + cb(); + }; + return writable; +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.jshintrc b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.jshintrc new file mode 100644 index 00000000..c8ef3ca4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.jshintrc @@ -0,0 +1,59 @@ +{ + "predef": [ ] + , "bitwise": false + , "camelcase": false + , "curly": false + , "eqeqeq": false + , "forin": false + , "immed": false + , "latedef": false + , "noarg": true + , "noempty": true + , "nonew": true + , "plusplus": false + , "quotmark": true + , "regexp": false + , "undef": true + , "unused": true + , "strict": false + , "trailing": true + , "maxlen": 120 + , "asi": true + , "boss": true + , "debug": true + , "eqnull": true + , "esnext": true + , "evil": true + , "expr": true + , "funcscope": false + , "globalstrict": false + , "iterator": false + , "lastsemic": true + , "laxbreak": true + , "laxcomma": true + , "loopfunc": true + , "multistr": false + , "onecase": false + , "proto": false + , "regexdash": false + , "scripturl": true + , "smarttabs": false + , "shadow": false + , "sub": true + , "supernew": false + , "validthis": true + , "browser": true + , "couch": false + , "devel": false + , "dojo": false + , "mootools": false + , "node": true + , "nonstandard": true + , "prototypejs": false + , "rhino": false + , "worker": true + , "wsh": false + , "nomen": false + , "onevar": false + , "passfail": false +} \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.npmignore b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.npmignore new file mode 100644 index 00000000..b512c09d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.npmignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.travis.yml b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.travis.yml new file mode 100644 index 00000000..12b1a310 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/.travis.yml @@ -0,0 +1,17 @@ +language: node_js +node_js: +- '0.8' +- '0.10' +- '0.11' +branches: + only: + - master +notifications: + email: + - rod@vagg.org +script: npm test +env: + global: + - SAUCE_USER=through2-sauce + - secure: A8KyygIlklZOcTwTGhZHpkOu7Cn4tI1QQasg75CTSjudczGzkuh1pG2RDIkWqGcrWv9o5CjI6fFYYx0JvQu8o5PO+ZAtV1Z0AlnM965vE8kAx0XEC7giAV323bibfnHwyQu74vIhbOfdes7E4/cYerV2kAjK0T375D4DYEpDuvw= + diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/LICENSE b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/LICENSE new file mode 100644 index 00000000..f6a0029d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/LICENSE @@ -0,0 +1,39 @@ +Copyright 2013, Rod Vagg (the "Original Author") +All rights reserved. + +MIT +no-false-attribs 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. + +Distributions of all or part of the Software intended to be used +by the recipients as they would use the unmodified Software, +containing modifications that substantially alter, remove, or +disable functionality of the Software, outside of the documented +configuration mechanisms provided by the Software, shall be +modified such that the Original Author's bug reporting email +addresses and urls are either replaced with the contact information +of the parties responsible for the changes, or removed entirely. + +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. + + +Except where noted, this license applies to any and all software +programs and associated documentation files created by the +Original Author, when distributed with the Software. \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/README.md new file mode 100644 index 00000000..c9388b38 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/README.md @@ -0,0 +1,131 @@ +# through2 + +<!-- + +soon ... + +[![Build Status](https://secure.travis-ci.org/rvagg/through2.png)](http://travis-ci.org/rvagg/through2) + +[![Build Status](https://saucelabs.com/browser-matrix/through2-sauce.svg)](https://travis-ci.org/rvagg/through2) + +--> + +[![NPM](https://nodei.co/npm/through2.png?compact=true)](https://nodei.co/npm/through2/) + +<!-- +not happy with these, we need to peg to readable-stream@1.0.x so it'll always report out-of-date + +[![david-dm](https://david-dm.org/rvagg/through2.png)](https://david-dm.org/rvagg/through2/) +[![david-dm](https://david-dm.org/rvagg/through2/dev-status.png)](https://david-dm.org/rvagg/through2#info=devDependencies/) +--> + +**A tiny wrapper around Node streams.Transform (Streams2) to avoid explicit subclassing noise** + +Inspired by [Dominic Tarr](https://github.com/dominictarr)'s [through](https://github.com/dominictarr/through) in that it's so much easier to make a stream out of a function than it is to set up the prototype chain properly: `through(function (chunk) { ... })`. + +```js +fs.createReadStream('ex.txt') + .pipe(through2(function (chunk, enc, callback) { + + for (var i = 0; i < chunk.length; i++) + if (chunk[i] == 97) + chunk[i] = 122 // swap 'a' for 'z' + + this.push(chunk) + + callback() + + })) + .pipe(fs.createWriteStream('out.txt')) +``` + +Or object streams: + +```js +var all = [] + +fs.createReadStream('data.csv') + .pipe(csv2()) + .pipe(through2.obj(function (chunk, enc, callback) { + + var data = { + name : chunk[0] + , address : chunk[3] + , phone : chunk[10] + } + + this.push(data) + + callback() + + })) + .on('data', function (data) { + all.push(data) + }) + .on('end', function () { + doSomethingSpecial(all) + }) +``` + +Note that `through2.obj(fn)` is a convenience wrapper around `through2({ objectMode: true }, fn)`. + +## API + +<b><code>through2([ options, ] [ transformFunction ] [, flushFunction ])</code></b> + +Consult the **[stream.Transform](http://nodejs.org/docs/latest/api/stream.html#stream_class_stream_transform)** documentation for the exact rules of the `transformFunction` (i.e. `this._transform`) and the optional `flushFunction` (i.e. `this._flush`). + +### options + +The options argument is optional and is passed straight through to `stream.Transform`. So you can use `objectMode:true` if you are processing non-binary streams (or just use `through2.obj()`). + +The `options` argument is first, unlike standard convention, because if I'm passing in an anonymous function then I'd prefer for the options argument to not get lost at the end of the call: + +```js +fs.createReadStream('/tmp/important.dat') + .pipe(through2({ objectMode: true, allowHalfOpen: false }, function (chunk, enc, cb) { + + this.push(new Buffer('wut?')) + cb() + + }) + .pipe(fs.createWriteStream('/tmp/wut.txt')) +``` + +### transformFunction + +The `transformFunction` must have the following signature: `function (chunk, encoding, callback) {}`. A minimal implementation should call the `callback` function to indicate that the transformation is done, even if that transformation means discarding the chunk. + +To queue a new chunk, call `this.push(chunk)`—this can be called as many times as required before the `callback()` if you have multiple pieces to send on. + +If you **do not provide a `transformFunction`** then you will get a simple simple pass-through stream. + +### flushFunction + +The optional `flushFunction` is provided as the last argument (2nd or 3rd, depending on whether you've supplied options) is called just prior to the stream ending. Can be used to finish up any processing that may be in progress. + +<b><code>through2.ctor([ options, ] transformFunction[, flushFunction ])</code></b> + +Instead of returning a `stream.Transform` instance, `through2.ctor()` returns a **constructor** for a custom Transform. This is useful when you want to use the same transform logic in multiple instances. + +```js +var FToC = through2.ctor({objectMode: true}, function (record, encoding, callback) { + if (record.temp != null && record.unit = "F") { + record.temp = ( ( record.temp - 32 ) * 5 ) / 9 + record.unit = "C" + } + this.push(record) + callback() +}) + +// Create instances of FToC like so: +var converter = new FToC() +// Or: +var converter = FToC() +// Or specify/override options when you instantiate, if you prefer: +var converter = FToC({objectMode: true}) +``` + +## License + +**through2** is Copyright (c) 2013 Rod Vagg [@rvagg](https://twitter.com/rvagg) and licenced under the MIT licence. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details. diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore new file mode 100644 index 00000000..38344f87 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/.npmignore @@ -0,0 +1,5 @@ +build/ +test/ +examples/ +fs.js +zlib.js \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE new file mode 100644 index 00000000..0c44ae71 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/LICENSE @@ -0,0 +1,27 @@ +Copyright (c) Isaac Z. Schlueter ("Author") +All rights reserved. + +The BSD License + +Redistribution and use in source and binary forms, with or without +modification, are permitted provided that the following conditions +are met: + +1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + +2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in the + documentation and/or other materials provided with the distribution. + +THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND +ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS +BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR +CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF +SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR +BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, +WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE +OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md new file mode 100644 index 00000000..34c11897 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/README.md @@ -0,0 +1,15 @@ +# readable-stream + +***Node-core streams for userland*** + +[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true)](https://nodei.co/npm/readable-stream/) +[![NPM](https://nodei.co/npm-dl/readable-stream.png)](https://nodei.co/npm/readable-stream/) + +This package is a mirror of the Streams2 and Streams3 implementations in Node-core. + +If you want to guarantee a stable streams base, regardless of what version of Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *"stream"* module in Node-core. + +**readable-stream** comes in two major versions, v1.0.x and v1.1.x. The former tracks the Streams2 implementation in Node 0.10, including bug-fixes and minor improvements as they are added. The latter tracks Streams3 as it develops in Node 0.11; we will likely see a v1.2.x branch for Node 0.12. + +**readable-stream** uses proper patch-level versioning so if you pin to `"~1.0.0"` you’ll get the latest Node 0.10 Streams2 implementation, including any fixes and minor non-breaking improvements. The patch-level versions of 1.0.x and 1.1.x should mirror the patch-level versions of Node-core releases. You should prefer the **1.0.x** releases for now and when you’re ready to start using Streams3, pin to `"~1.1.0"` + diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js new file mode 100644 index 00000000..ca807af8 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/duplex.js @@ -0,0 +1 @@ +module.exports = require("./lib/_stream_duplex.js") diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js new file mode 100644 index 00000000..a2e0d8e0 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_duplex.js @@ -0,0 +1,69 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// 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. + +// a duplex stream is just a stream that is both readable and writable. +// Since JS doesn't have multiple prototypal inheritance, this class +// prototypally inherits from Readable, and then parasitically from +// Writable. + +module.exports = Duplex; +var util = require('util'); +var Readable = require('./_stream_readable'); +var Writable = require('./_stream_writable'); + +util.inherits(Duplex, Readable); + +Object.keys(Writable.prototype).forEach(function(method) { + if (!Duplex.prototype[method]) + Duplex.prototype[method] = Writable.prototype[method]; +}); + +function Duplex(options) { + if (!(this instanceof Duplex)) + return new Duplex(options); + + Readable.call(this, options); + Writable.call(this, options); + + if (options && options.readable === false) + this.readable = false; + + if (options && options.writable === false) + this.writable = false; + + this.allowHalfOpen = true; + if (options && options.allowHalfOpen === false) + this.allowHalfOpen = false; + + this.once('end', onend); +} + +// the no-half-open enforcer +function onend() { + // if we allow half-open state, or if the writable side ended, + // then we're ok. + if (this.allowHalfOpen || this._writableState.ended) + return; + + // no more data can be written. + // But allow more writes to happen in this tick. + process.nextTick(this.end.bind(this)); +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js new file mode 100644 index 00000000..330c247d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_passthrough.js @@ -0,0 +1,41 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// 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. + +// a passthrough stream. +// basically just the most minimal sort of Transform stream. +// Every written chunk gets output as-is. + +module.exports = PassThrough; + +var Transform = require('./_stream_transform'); +var util = require('util'); +util.inherits(PassThrough, Transform); + +function PassThrough(options) { + if (!(this instanceof PassThrough)) + return new PassThrough(options); + + Transform.call(this, options); +} + +PassThrough.prototype._transform = function(chunk, encoding, cb) { + cb(null, chunk); +}; diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js new file mode 100644 index 00000000..9a57f147 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_readable.js @@ -0,0 +1,928 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// 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. + +module.exports = Readable; +Readable.ReadableState = ReadableState; + +var EE = require('events').EventEmitter; +if (!EE.listenerCount) EE.listenerCount = function(emitter, type) { + return emitter.listeners(type).length; +}; +var Stream = require('stream'); +var util = require('util'); +var Buffer = require('buffer').Buffer; +var StringDecoder; + +util.inherits(Readable, Stream); + +function ReadableState(options, stream) { + options = options || {}; + + // the point at which it stops calling _read() to fill the buffer + // Note: 0 is a valid value, means "don't call _read preemptively ever" + var hwm = options.highWaterMark; + this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024; + + // cast to ints. + this.highWaterMark = ~~this.highWaterMark; + + this.buffer = []; + this.length = 0; + this.pipes = null; + this.pipesCount = 0; + this.flowing = false; + this.ended = false; + this.endEmitted = false; + this.reading = false; + + // In streams that never have any data, and do push(null) right away, + // the consumer can miss the 'end' event if they do some I/O before + // consuming the stream. So, we don't emit('end') until some reading + // happens. + this.calledRead = false; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, becuase any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // whenever we return null, then we set a flag to say + // that we're awaiting a 'readable' event emission. + this.needReadable = false; + this.emittedReadable = false; + this.readableListening = false; + + + // object stream flag. Used to make read(n) ignore n and to + // make all the buffer merging and length checks go away + this.objectMode = !!options.objectMode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // when piping, we only care about 'readable' events that happen + // after read()ing all the bytes and not getting any pushback. + this.ranOut = false; + + // the number of writers that are awaiting a drain event in .pipe()s + this.awaitDrain = 0; + + // if true, a maybeReadMore has been scheduled + this.readingMore = false; + + this.decoder = null; + this.encoding = null; + if (options.encoding) { + if (!StringDecoder) + StringDecoder = require('string_decoder/').StringDecoder; + this.decoder = new StringDecoder(options.encoding); + this.encoding = options.encoding; + } +} + +function Readable(options) { + if (!(this instanceof Readable)) + return new Readable(options); + + this._readableState = new ReadableState(options, this); + + // legacy + this.readable = true; + + Stream.call(this); +} + +// Manually shove something into the read() buffer. +// This returns true if the highWaterMark has not been hit yet, +// similar to how Writable.write() returns true if you should +// write() some more. +Readable.prototype.push = function(chunk, encoding) { + var state = this._readableState; + + if (typeof chunk === 'string' && !state.objectMode) { + encoding = encoding || state.defaultEncoding; + if (encoding !== state.encoding) { + chunk = new Buffer(chunk, encoding); + encoding = ''; + } + } + + return readableAddChunk(this, state, chunk, encoding, false); +}; + +// Unshift should *always* be something directly out of read() +Readable.prototype.unshift = function(chunk) { + var state = this._readableState; + return readableAddChunk(this, state, chunk, '', true); +}; + +function readableAddChunk(stream, state, chunk, encoding, addToFront) { + var er = chunkInvalid(state, chunk); + if (er) { + stream.emit('error', er); + } else if (chunk === null || chunk === undefined) { + state.reading = false; + if (!state.ended) + onEofChunk(stream, state); + } else if (state.objectMode || chunk && chunk.length > 0) { + if (state.ended && !addToFront) { + var e = new Error('stream.push() after EOF'); + stream.emit('error', e); + } else if (state.endEmitted && addToFront) { + var e = new Error('stream.unshift() after end event'); + stream.emit('error', e); + } else { + if (state.decoder && !addToFront && !encoding) + chunk = state.decoder.write(chunk); + + // update the buffer info. + state.length += state.objectMode ? 1 : chunk.length; + if (addToFront) { + state.buffer.unshift(chunk); + } else { + state.reading = false; + state.buffer.push(chunk); + } + + if (state.needReadable) + emitReadable(stream); + + maybeReadMore(stream, state); + } + } else if (!addToFront) { + state.reading = false; + } + + return needMoreData(state); +} + + + +// if it's past the high water mark, we can push in some more. +// Also, if we have no data yet, we can stand some +// more bytes. This is to work around cases where hwm=0, +// such as the repl. Also, if the push() triggered a +// readable event, and the user called read(largeNumber) such that +// needReadable was set, then we ought to push more, so that another +// 'readable' event will be triggered. +function needMoreData(state) { + return !state.ended && + (state.needReadable || + state.length < state.highWaterMark || + state.length === 0); +} + +// backwards compatibility. +Readable.prototype.setEncoding = function(enc) { + if (!StringDecoder) + StringDecoder = require('string_decoder/').StringDecoder; + this._readableState.decoder = new StringDecoder(enc); + this._readableState.encoding = enc; +}; + +// Don't raise the hwm > 128MB +var MAX_HWM = 0x800000; +function roundUpToNextPowerOf2(n) { + if (n >= MAX_HWM) { + n = MAX_HWM; + } else { + // Get the next highest power of 2 + n--; + for (var p = 1; p < 32; p <<= 1) n |= n >> p; + n++; + } + return n; +} + +function howMuchToRead(n, state) { + if (state.length === 0 && state.ended) + return 0; + + if (state.objectMode) + return n === 0 ? 0 : 1; + + if (isNaN(n) || n === null) { + // only flow one buffer at a time + if (state.flowing && state.buffer.length) + return state.buffer[0].length; + else + return state.length; + } + + if (n <= 0) + return 0; + + // If we're asking for more than the target buffer level, + // then raise the water mark. Bump up to the next highest + // power of 2, to prevent increasing it excessively in tiny + // amounts. + if (n > state.highWaterMark) + state.highWaterMark = roundUpToNextPowerOf2(n); + + // don't have that much. return null, unless we've ended. + if (n > state.length) { + if (!state.ended) { + state.needReadable = true; + return 0; + } else + return state.length; + } + + return n; +} + +// you can override either this method, or the async _read(n) below. +Readable.prototype.read = function(n) { + var state = this._readableState; + state.calledRead = true; + var nOrig = n; + + if (typeof n !== 'number' || n > 0) + state.emittedReadable = false; + + // if we're doing read(0) to trigger a readable event, but we + // already have a bunch of data in the buffer, then just trigger + // the 'readable' event and move on. + if (n === 0 && + state.needReadable && + (state.length >= state.highWaterMark || state.ended)) { + emitReadable(this); + return null; + } + + n = howMuchToRead(n, state); + + // if we've ended, and we're now clear, then finish it up. + if (n === 0 && state.ended) { + if (state.length === 0) + endReadable(this); + return null; + } + + // All the actual chunk generation logic needs to be + // *below* the call to _read. The reason is that in certain + // synthetic stream cases, such as passthrough streams, _read + // may be a completely synchronous operation which may change + // the state of the read buffer, providing enough data when + // before there was *not* enough. + // + // So, the steps are: + // 1. Figure out what the state of things will be after we do + // a read from the buffer. + // + // 2. If that resulting state will trigger a _read, then call _read. + // Note that this may be asynchronous, or synchronous. Yes, it is + // deeply ugly to write APIs this way, but that still doesn't mean + // that the Readable class should behave improperly, as streams are + // designed to be sync/async agnostic. + // Take note if the _read call is sync or async (ie, if the read call + // has returned yet), so that we know whether or not it's safe to emit + // 'readable' etc. + // + // 3. Actually pull the requested chunks out of the buffer and return. + + // if we need a readable event, then we need to do some reading. + var doRead = state.needReadable; + + // if we currently have less than the highWaterMark, then also read some + if (state.length - n <= state.highWaterMark) + doRead = true; + + // however, if we've ended, then there's no point, and if we're already + // reading, then it's unnecessary. + if (state.ended || state.reading) + doRead = false; + + if (doRead) { + state.reading = true; + state.sync = true; + // if the length is currently zero, then we *need* a readable event. + if (state.length === 0) + state.needReadable = true; + // call internal read method + this._read(state.highWaterMark); + state.sync = false; + } + + // If _read called its callback synchronously, then `reading` + // will be false, and we need to re-evaluate how much data we + // can return to the user. + if (doRead && !state.reading) + n = howMuchToRead(nOrig, state); + + var ret; + if (n > 0) + ret = fromList(n, state); + else + ret = null; + + if (ret === null) { + state.needReadable = true; + n = 0; + } + + state.length -= n; + + // If we have nothing in the buffer, then we want to know + // as soon as we *do* get something into the buffer. + if (state.length === 0 && !state.ended) + state.needReadable = true; + + // If we happened to read() exactly the remaining amount in the + // buffer, and the EOF has been seen at this point, then make sure + // that we emit 'end' on the very next tick. + if (state.ended && !state.endEmitted && state.length === 0) + endReadable(this); + + return ret; +}; + +function chunkInvalid(state, chunk) { + var er = null; + if (!Buffer.isBuffer(chunk) && + 'string' !== typeof chunk && + chunk !== null && + chunk !== undefined && + !state.objectMode && + !er) { + er = new TypeError('Invalid non-string/buffer chunk'); + } + return er; +} + + +function onEofChunk(stream, state) { + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) { + state.buffer.push(chunk); + state.length += state.objectMode ? 1 : chunk.length; + } + } + state.ended = true; + + // if we've ended and we have some data left, then emit + // 'readable' now to make sure it gets picked up. + if (state.length > 0) + emitReadable(stream); + else + endReadable(stream); +} + +// Don't emit readable right away in sync mode, because this can trigger +// another read() call => stack overflow. This way, it might trigger +// a nextTick recursion warning, but that's not so bad. +function emitReadable(stream) { + var state = stream._readableState; + state.needReadable = false; + if (state.emittedReadable) + return; + + state.emittedReadable = true; + if (state.sync) + process.nextTick(function() { + emitReadable_(stream); + }); + else + emitReadable_(stream); +} + +function emitReadable_(stream) { + stream.emit('readable'); +} + + +// at this point, the user has presumably seen the 'readable' event, +// and called read() to consume some data. that may have triggered +// in turn another _read(n) call, in which case reading = true if +// it's in progress. +// However, if we're not ended, or reading, and the length < hwm, +// then go ahead and try to read some more preemptively. +function maybeReadMore(stream, state) { + if (!state.readingMore) { + state.readingMore = true; + process.nextTick(function() { + maybeReadMore_(stream, state); + }); + } +} + +function maybeReadMore_(stream, state) { + var len = state.length; + while (!state.reading && !state.flowing && !state.ended && + state.length < state.highWaterMark) { + stream.read(0); + if (len === state.length) + // didn't get any data, stop spinning. + break; + else + len = state.length; + } + state.readingMore = false; +} + +// abstract method. to be overridden in specific implementation classes. +// call cb(er, data) where data is <= n in length. +// for virtual (non-string, non-buffer) streams, "length" is somewhat +// arbitrary, and perhaps not very meaningful. +Readable.prototype._read = function(n) { + this.emit('error', new Error('not implemented')); +}; + +Readable.prototype.pipe = function(dest, pipeOpts) { + var src = this; + var state = this._readableState; + + switch (state.pipesCount) { + case 0: + state.pipes = dest; + break; + case 1: + state.pipes = [state.pipes, dest]; + break; + default: + state.pipes.push(dest); + break; + } + state.pipesCount += 1; + + var doEnd = (!pipeOpts || pipeOpts.end !== false) && + dest !== process.stdout && + dest !== process.stderr; + + var endFn = doEnd ? onend : cleanup; + if (state.endEmitted) + process.nextTick(endFn); + else + src.once('end', endFn); + + dest.on('unpipe', onunpipe); + function onunpipe(readable) { + if (readable !== src) return; + cleanup(); + } + + function onend() { + dest.end(); + } + + // when the dest drains, it reduces the awaitDrain counter + // on the source. This would be more elegant with a .once() + // handler in flow(), but adding and removing repeatedly is + // too slow. + var ondrain = pipeOnDrain(src); + dest.on('drain', ondrain); + + function cleanup() { + // cleanup event handlers once the pipe is broken + dest.removeListener('close', onclose); + dest.removeListener('finish', onfinish); + dest.removeListener('drain', ondrain); + dest.removeListener('error', onerror); + dest.removeListener('unpipe', onunpipe); + src.removeListener('end', onend); + src.removeListener('end', cleanup); + + // if the reader is waiting for a drain event from this + // specific writer, then it would cause it to never start + // flowing again. + // So, if this is awaiting a drain, then we just call it now. + // If we don't know, then assume that we are waiting for one. + if (!dest._writableState || dest._writableState.needDrain) + ondrain(); + } + + // if the dest has an error, then stop piping into it. + // however, don't suppress the throwing behavior for this. + function onerror(er) { + unpipe(); + dest.removeListener('error', onerror); + if (EE.listenerCount(dest, 'error') === 0) + dest.emit('error', er); + } + // This is a brutally ugly hack to make sure that our error handler + // is attached before any userland ones. NEVER DO THIS. + if (!dest._events || !dest._events.error) + dest.on('error', onerror); + else if (Array.isArray(dest._events.error)) + dest._events.error.unshift(onerror); + else + dest._events.error = [onerror, dest._events.error]; + + + + // Both close and finish should trigger unpipe, but only once. + function onclose() { + dest.removeListener('finish', onfinish); + unpipe(); + } + dest.once('close', onclose); + function onfinish() { + dest.removeListener('close', onclose); + unpipe(); + } + dest.once('finish', onfinish); + + function unpipe() { + src.unpipe(dest); + } + + // tell the dest that it's being piped to + dest.emit('pipe', src); + + // start the flow if it hasn't been started already. + if (!state.flowing) { + // the handler that waits for readable events after all + // the data gets sucked out in flow. + // This would be easier to follow with a .once() handler + // in flow(), but that is too slow. + this.on('readable', pipeOnReadable); + + state.flowing = true; + process.nextTick(function() { + flow(src); + }); + } + + return dest; +}; + +function pipeOnDrain(src) { + return function() { + var dest = this; + var state = src._readableState; + state.awaitDrain--; + if (state.awaitDrain === 0) + flow(src); + }; +} + +function flow(src) { + var state = src._readableState; + var chunk; + state.awaitDrain = 0; + + function write(dest, i, list) { + var written = dest.write(chunk); + if (false === written) { + state.awaitDrain++; + } + } + + while (state.pipesCount && null !== (chunk = src.read())) { + + if (state.pipesCount === 1) + write(state.pipes, 0, null); + else + state.pipes.forEach(write); + + src.emit('data', chunk); + + // if anyone needs a drain, then we have to wait for that. + if (state.awaitDrain > 0) + return; + } + + // if every destination was unpiped, either before entering this + // function, or in the while loop, then stop flowing. + // + // NB: This is a pretty rare edge case. + if (state.pipesCount === 0) { + state.flowing = false; + + // if there were data event listeners added, then switch to old mode. + if (EE.listenerCount(src, 'data') > 0) + emitDataEvents(src); + return; + } + + // at this point, no one needed a drain, so we just ran out of data + // on the next readable event, start it over again. + state.ranOut = true; +} + +function pipeOnReadable() { + if (this._readableState.ranOut) { + this._readableState.ranOut = false; + flow(this); + } +} + + +Readable.prototype.unpipe = function(dest) { + var state = this._readableState; + + // if we're not piping anywhere, then do nothing. + if (state.pipesCount === 0) + return this; + + // just one destination. most common case. + if (state.pipesCount === 1) { + // passed in one, but it's not the right one. + if (dest && dest !== state.pipes) + return this; + + if (!dest) + dest = state.pipes; + + // got a match. + state.pipes = null; + state.pipesCount = 0; + this.removeListener('readable', pipeOnReadable); + state.flowing = false; + if (dest) + dest.emit('unpipe', this); + return this; + } + + // slow case. multiple pipe destinations. + + if (!dest) { + // remove all. + var dests = state.pipes; + var len = state.pipesCount; + state.pipes = null; + state.pipesCount = 0; + this.removeListener('readable', pipeOnReadable); + state.flowing = false; + + for (var i = 0; i < len; i++) + dests[i].emit('unpipe', this); + return this; + } + + // try to find the right one. + var i = state.pipes.indexOf(dest); + if (i === -1) + return this; + + state.pipes.splice(i, 1); + state.pipesCount -= 1; + if (state.pipesCount === 1) + state.pipes = state.pipes[0]; + + dest.emit('unpipe', this); + + return this; +}; + +// set up data events if they are asked for +// Ensure readable listeners eventually get something +Readable.prototype.on = function(ev, fn) { + var res = Stream.prototype.on.call(this, ev, fn); + + if (ev === 'data' && !this._readableState.flowing) + emitDataEvents(this); + + if (ev === 'readable' && this.readable) { + var state = this._readableState; + if (!state.readableListening) { + state.readableListening = true; + state.emittedReadable = false; + state.needReadable = true; + if (!state.reading) { + this.read(0); + } else if (state.length) { + emitReadable(this, state); + } + } + } + + return res; +}; +Readable.prototype.addListener = Readable.prototype.on; + +// pause() and resume() are remnants of the legacy readable stream API +// If the user uses them, then switch into old mode. +Readable.prototype.resume = function() { + emitDataEvents(this); + this.read(0); + this.emit('resume'); +}; + +Readable.prototype.pause = function() { + emitDataEvents(this, true); + this.emit('pause'); +}; + +function emitDataEvents(stream, startPaused) { + var state = stream._readableState; + + if (state.flowing) { + // https://github.com/isaacs/readable-stream/issues/16 + throw new Error('Cannot switch to old mode now.'); + } + + var paused = startPaused || false; + var readable = false; + + // convert to an old-style stream. + stream.readable = true; + stream.pipe = Stream.prototype.pipe; + stream.on = stream.addListener = Stream.prototype.on; + + stream.on('readable', function() { + readable = true; + + var c; + while (!paused && (null !== (c = stream.read()))) + stream.emit('data', c); + + if (c === null) { + readable = false; + stream._readableState.needReadable = true; + } + }); + + stream.pause = function() { + paused = true; + this.emit('pause'); + }; + + stream.resume = function() { + paused = false; + if (readable) + process.nextTick(function() { + stream.emit('readable'); + }); + else + this.read(0); + this.emit('resume'); + }; + + // now make it start, just in case it hadn't already. + stream.emit('readable'); +} + +// wrap an old-style stream as the async data source. +// This is *not* part of the readable stream interface. +// It is an ugly unfortunate mess of history. +Readable.prototype.wrap = function(stream) { + var state = this._readableState; + var paused = false; + + var self = this; + stream.on('end', function() { + if (state.decoder && !state.ended) { + var chunk = state.decoder.end(); + if (chunk && chunk.length) + self.push(chunk); + } + + self.push(null); + }); + + stream.on('data', function(chunk) { + if (state.decoder) + chunk = state.decoder.write(chunk); + if (!chunk || !state.objectMode && !chunk.length) + return; + + var ret = self.push(chunk); + if (!ret) { + paused = true; + stream.pause(); + } + }); + + // proxy all the other methods. + // important when wrapping filters and duplexes. + for (var i in stream) { + if (typeof stream[i] === 'function' && + typeof this[i] === 'undefined') { + this[i] = function(method) { return function() { + return stream[method].apply(stream, arguments); + }}(i); + } + } + + // proxy certain important events. + var events = ['error', 'close', 'destroy', 'pause', 'resume']; + events.forEach(function(ev) { + stream.on(ev, self.emit.bind(self, ev)); + }); + + // when we try to consume some more bytes, simply unpause the + // underlying stream. + self._read = function(n) { + if (paused) { + paused = false; + stream.resume(); + } + }; + + return self; +}; + + + +// exposed for testing purposes only. +Readable._fromList = fromList; + +// Pluck off n bytes from an array of buffers. +// Length is the combined lengths of all the buffers in the list. +function fromList(n, state) { + var list = state.buffer; + var length = state.length; + var stringMode = !!state.decoder; + var objectMode = !!state.objectMode; + var ret; + + // nothing in the list, definitely empty. + if (list.length === 0) + return null; + + if (length === 0) + ret = null; + else if (objectMode) + ret = list.shift(); + else if (!n || n >= length) { + // read it all, truncate the array. + if (stringMode) + ret = list.join(''); + else + ret = Buffer.concat(list, length); + list.length = 0; + } else { + // read just some of it. + if (n < list[0].length) { + // just take a part of the first list item. + // slice is the same for buffers and strings. + var buf = list[0]; + ret = buf.slice(0, n); + list[0] = buf.slice(n); + } else if (n === list[0].length) { + // first list is a perfect match + ret = list.shift(); + } else { + // complex case. + // we have enough to cover it, but it spans past the first buffer. + if (stringMode) + ret = ''; + else + ret = new Buffer(n); + + var c = 0; + for (var i = 0, l = list.length; i < l && c < n; i++) { + var buf = list[0]; + var cpy = Math.min(n - c, buf.length); + + if (stringMode) + ret += buf.slice(0, cpy); + else + buf.copy(ret, c, 0, cpy); + + if (cpy < buf.length) + list[0] = buf.slice(cpy); + else + list.shift(); + + c += cpy; + } + } + } + + return ret; +} + +function endReadable(stream) { + var state = stream._readableState; + + // If we get here before consuming all the bytes, then that is a + // bug in node. Should never happen. + if (state.length > 0) + throw new Error('endReadable called on non-empty stream'); + + if (!state.endEmitted && state.calledRead) { + state.ended = true; + process.nextTick(function() { + // Check that we didn't get one last unshift. + if (!state.endEmitted && state.length === 0) { + state.endEmitted = true; + stream.readable = false; + stream.emit('end'); + } + }); + } +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js new file mode 100644 index 00000000..707e4b3b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_transform.js @@ -0,0 +1,205 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// 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. + + +// a transform stream is a readable/writable stream where you do +// something with the data. Sometimes it's called a "filter", +// but that's not a great name for it, since that implies a thing where +// some bits pass through, and others are simply ignored. (That would +// be a valid example of a transform, of course.) +// +// While the output is causally related to the input, it's not a +// necessarily symmetric or synchronous transformation. For example, +// a zlib stream might take multiple plain-text writes(), and then +// emit a single compressed chunk some time in the future. +// +// Here's how this works: +// +// The Transform stream has all the aspects of the readable and writable +// stream classes. When you write(chunk), that calls _write(chunk,cb) +// internally, and returns false if there's a lot of pending writes +// buffered up. When you call read(), that calls _read(n) until +// there's enough pending readable data buffered up. +// +// In a transform stream, the written data is placed in a buffer. When +// _read(n) is called, it transforms the queued up data, calling the +// buffered _write cb's as it consumes chunks. If consuming a single +// written chunk would result in multiple output chunks, then the first +// outputted bit calls the readcb, and subsequent chunks just go into +// the read buffer, and will cause it to emit 'readable' if necessary. +// +// This way, back-pressure is actually determined by the reading side, +// since _read has to be called to start processing a new chunk. However, +// a pathological inflate type of transform can cause excessive buffering +// here. For example, imagine a stream where every byte of input is +// interpreted as an integer from 0-255, and then results in that many +// bytes of output. Writing the 4 bytes {ff,ff,ff,ff} would result in +// 1kb of data being output. In this case, you could write a very small +// amount of input, and end up with a very large amount of output. In +// such a pathological inflating mechanism, there'd be no way to tell +// the system to stop doing the transform. A single 4MB write could +// cause the system to run out of memory. +// +// However, even in such a pathological case, only a single written chunk +// would be consumed, and then the rest would wait (un-transformed) until +// the results of the previous transformed chunk were consumed. + +module.exports = Transform; + +var Duplex = require('./_stream_duplex'); +var util = require('util'); +util.inherits(Transform, Duplex); + + +function TransformState(options, stream) { + this.afterTransform = function(er, data) { + return afterTransform(stream, er, data); + }; + + this.needTransform = false; + this.transforming = false; + this.writecb = null; + this.writechunk = null; +} + +function afterTransform(stream, er, data) { + var ts = stream._transformState; + ts.transforming = false; + + var cb = ts.writecb; + + if (!cb) + return stream.emit('error', new Error('no writecb in Transform class')); + + ts.writechunk = null; + ts.writecb = null; + + if (data !== null && data !== undefined) + stream.push(data); + + if (cb) + cb(er); + + var rs = stream._readableState; + rs.reading = false; + if (rs.needReadable || rs.length < rs.highWaterMark) { + stream._read(rs.highWaterMark); + } +} + + +function Transform(options) { + if (!(this instanceof Transform)) + return new Transform(options); + + Duplex.call(this, options); + + var ts = this._transformState = new TransformState(options, this); + + // when the writable side finishes, then flush out anything remaining. + var stream = this; + + // start out asking for a readable event once data is transformed. + this._readableState.needReadable = true; + + // we have implemented the _read method, and done the other things + // that Readable wants before the first _read call, so unset the + // sync guard flag. + this._readableState.sync = false; + + this.once('finish', function() { + if ('function' === typeof this._flush) + this._flush(function(er) { + done(stream, er); + }); + else + done(stream); + }); +} + +Transform.prototype.push = function(chunk, encoding) { + this._transformState.needTransform = false; + return Duplex.prototype.push.call(this, chunk, encoding); +}; + +// This is the part where you do stuff! +// override this function in implementation classes. +// 'chunk' is an input chunk. +// +// Call `push(newChunk)` to pass along transformed output +// to the readable side. You may call 'push' zero or more times. +// +// Call `cb(err)` when you are done with this chunk. If you pass +// an error, then that'll put the hurt on the whole operation. If you +// never call cb(), then you'll never get another chunk. +Transform.prototype._transform = function(chunk, encoding, cb) { + throw new Error('not implemented'); +}; + +Transform.prototype._write = function(chunk, encoding, cb) { + var ts = this._transformState; + ts.writecb = cb; + ts.writechunk = chunk; + ts.writeencoding = encoding; + if (!ts.transforming) { + var rs = this._readableState; + if (ts.needTransform || + rs.needReadable || + rs.length < rs.highWaterMark) + this._read(rs.highWaterMark); + } +}; + +// Doesn't matter what the args are here. +// _transform does all the work. +// That we got here means that the readable side wants more data. +Transform.prototype._read = function(n) { + var ts = this._transformState; + + if (ts.writechunk !== null && ts.writecb && !ts.transforming) { + ts.transforming = true; + this._transform(ts.writechunk, ts.writeencoding, ts.afterTransform); + } else { + // mark that we need a transform, so that any data that comes in + // will get processed, now that we've asked for it. + ts.needTransform = true; + } +}; + + +function done(stream, er) { + if (er) + return stream.emit('error', er); + + // if there's nothing in the write buffer, then that means + // that nothing more will ever be provided + var ws = stream._writableState; + var rs = stream._readableState; + var ts = stream._transformState; + + if (ws.length) + throw new Error('calling transform done when ws.length != 0'); + + if (ts.transforming) + throw new Error('calling transform done when still transforming'); + + return stream.push(null); +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js new file mode 100644 index 00000000..32fbab77 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/lib/_stream_writable.js @@ -0,0 +1,378 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// 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. + +// A bit simpler than readable streams. +// Implement an async ._write(chunk, cb), and it'll handle all +// the drain event emission and buffering. + +module.exports = Writable; +Writable.WritableState = WritableState; + +var util = require('util'); +var Buffer = require('buffer').Buffer; +var assert = require('assert'); +var Stream = require('stream'); + +util.inherits(Writable, Stream); + +function WriteReq(chunk, encoding, cb) { + this.chunk = chunk; + this.encoding = encoding; + this.callback = cb; +} + +function WritableState(options, stream) { + options = options || {}; + + // the point at which write() starts returning false + // Note: 0 is a valid value, means that we always return false if + // the entire buffer is not flushed immediately on write() + var hwm = options.highWaterMark; + this.highWaterMark = (hwm || hwm === 0) ? hwm : 16 * 1024; + + // object stream flag to indicate whether or not this stream + // contains buffers or objects. + this.objectMode = !!options.objectMode; + + // cast to ints. + this.highWaterMark = ~~this.highWaterMark; + + this.needDrain = false; + // at the start of calling end() + this.ending = false; + // when end() has been called, and returned + this.ended = false; + // when 'finish' is emitted + this.finished = false; + + // should we decode strings into buffers before passing to _write? + // this is here so that some node-core streams can optimize string + // handling at a lower level. + var noDecode = options.decodeStrings === false; + this.decodeStrings = !noDecode; + + // Crypto is kind of old and crusty. Historically, its default string + // encoding is 'binary' so we have to make this configurable. + // Everything else in the universe uses 'utf8', though. + this.defaultEncoding = options.defaultEncoding || 'utf8'; + + // not an actual buffer we keep track of, but a measurement + // of how much we're waiting to get pushed to some underlying + // socket or file. + this.length = 0; + + // a flag to see when we're in the middle of a write. + this.writing = false; + + // a flag to be able to tell if the onwrite cb is called immediately, + // or on a later tick. We set this to true at first, becuase any + // actions that shouldn't happen until "later" should generally also + // not happen before the first write call. + this.sync = true; + + // a flag to know if we're processing previously buffered items, which + // may call the _write() callback in the same tick, so that we don't + // end up in an overlapped onwrite situation. + this.bufferProcessing = false; + + // the callback that's passed to _write(chunk,cb) + this.onwrite = function(er) { + onwrite(stream, er); + }; + + // the callback that the user supplies to write(chunk,encoding,cb) + this.writecb = null; + + // the amount that is being written when _write is called. + this.writelen = 0; + + this.buffer = []; + + // True if the error was already emitted and should not be thrown again + this.errorEmitted = false; +} + +function Writable(options) { + var Duplex = require('./_stream_duplex'); + + // Writable ctor is applied to Duplexes, though they're not + // instanceof Writable, they're instanceof Readable. + if (!(this instanceof Writable) && !(this instanceof Duplex)) + return new Writable(options); + + this._writableState = new WritableState(options, this); + + // legacy. + this.writable = true; + + Stream.call(this); +} + +// Otherwise people can pipe Writable streams, which is just wrong. +Writable.prototype.pipe = function() { + this.emit('error', new Error('Cannot pipe. Not readable.')); +}; + + +function writeAfterEnd(stream, state, cb) { + var er = new Error('write after end'); + // TODO: defer error events consistently everywhere, not just the cb + stream.emit('error', er); + process.nextTick(function() { + cb(er); + }); +} + +// If we get something that is not a buffer, string, null, or undefined, +// and we're not in objectMode, then that's an error. +// Otherwise stream chunks are all considered to be of length=1, and the +// watermarks determine how many objects to keep in the buffer, rather than +// how many bytes or characters. +function validChunk(stream, state, chunk, cb) { + var valid = true; + if (!Buffer.isBuffer(chunk) && + 'string' !== typeof chunk && + chunk !== null && + chunk !== undefined && + !state.objectMode) { + var er = new TypeError('Invalid non-string/buffer chunk'); + stream.emit('error', er); + process.nextTick(function() { + cb(er); + }); + valid = false; + } + return valid; +} + +Writable.prototype.write = function(chunk, encoding, cb) { + var state = this._writableState; + var ret = false; + + if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (Buffer.isBuffer(chunk)) + encoding = 'buffer'; + else if (!encoding) + encoding = state.defaultEncoding; + + if (typeof cb !== 'function') + cb = function() {}; + + if (state.ended) + writeAfterEnd(this, state, cb); + else if (validChunk(this, state, chunk, cb)) + ret = writeOrBuffer(this, state, chunk, encoding, cb); + + return ret; +}; + +function decodeChunk(state, chunk, encoding) { + if (!state.objectMode && + state.decodeStrings !== false && + typeof chunk === 'string') { + chunk = new Buffer(chunk, encoding); + } + return chunk; +} + +// if we're already writing something, then just put this +// in the queue, and wait our turn. Otherwise, call _write +// If we return false, then we need a drain event, so set that flag. +function writeOrBuffer(stream, state, chunk, encoding, cb) { + chunk = decodeChunk(state, chunk, encoding); + if (Buffer.isBuffer(chunk)) + encoding = 'buffer'; + var len = state.objectMode ? 1 : chunk.length; + + state.length += len; + + var ret = state.length < state.highWaterMark; + // we must ensure that previous needDrain will not be reset to false. + if (!ret) + state.needDrain = true; + + if (state.writing) + state.buffer.push(new WriteReq(chunk, encoding, cb)); + else + doWrite(stream, state, len, chunk, encoding, cb); + + return ret; +} + +function doWrite(stream, state, len, chunk, encoding, cb) { + state.writelen = len; + state.writecb = cb; + state.writing = true; + state.sync = true; + stream._write(chunk, encoding, state.onwrite); + state.sync = false; +} + +function onwriteError(stream, state, sync, er, cb) { + if (sync) + process.nextTick(function() { + cb(er); + }); + else + cb(er); + + stream._writableState.errorEmitted = true; + stream.emit('error', er); +} + +function onwriteStateUpdate(state) { + state.writing = false; + state.writecb = null; + state.length -= state.writelen; + state.writelen = 0; +} + +function onwrite(stream, er) { + var state = stream._writableState; + var sync = state.sync; + var cb = state.writecb; + + onwriteStateUpdate(state); + + if (er) + onwriteError(stream, state, sync, er, cb); + else { + // Check if we're actually ready to finish, but don't emit yet + var finished = needFinish(stream, state); + + if (!finished && !state.bufferProcessing && state.buffer.length) + clearBuffer(stream, state); + + if (sync) { + process.nextTick(function() { + afterWrite(stream, state, finished, cb); + }); + } else { + afterWrite(stream, state, finished, cb); + } + } +} + +function afterWrite(stream, state, finished, cb) { + if (!finished) + onwriteDrain(stream, state); + cb(); + if (finished) + finishMaybe(stream, state); +} + +// Must force callback to be called on nextTick, so that we don't +// emit 'drain' before the write() consumer gets the 'false' return +// value, and has a chance to attach a 'drain' listener. +function onwriteDrain(stream, state) { + if (state.length === 0 && state.needDrain) { + state.needDrain = false; + stream.emit('drain'); + } +} + + +// if there's something in the buffer waiting, then process it +function clearBuffer(stream, state) { + state.bufferProcessing = true; + + for (var c = 0; c < state.buffer.length; c++) { + var entry = state.buffer[c]; + var chunk = entry.chunk; + var encoding = entry.encoding; + var cb = entry.callback; + var len = state.objectMode ? 1 : chunk.length; + + doWrite(stream, state, len, chunk, encoding, cb); + + // if we didn't call the onwrite immediately, then + // it means that we need to wait until it does. + // also, that means that the chunk and cb are currently + // being processed, so move the buffer counter past them. + if (state.writing) { + c++; + break; + } + } + + state.bufferProcessing = false; + if (c < state.buffer.length) + state.buffer = state.buffer.slice(c); + else + state.buffer.length = 0; +} + +Writable.prototype._write = function(chunk, encoding, cb) { + cb(new Error('not implemented')); +}; + +Writable.prototype.end = function(chunk, encoding, cb) { + var state = this._writableState; + + if (typeof chunk === 'function') { + cb = chunk; + chunk = null; + encoding = null; + } else if (typeof encoding === 'function') { + cb = encoding; + encoding = null; + } + + if (typeof chunk !== 'undefined' && chunk !== null) + this.write(chunk, encoding); + + // ignore unnecessary end() calls. + if (!state.ending && !state.finished) + endWritable(this, state, cb); +}; + + +function needFinish(stream, state) { + return (state.ending && + state.length === 0 && + !state.finished && + !state.writing); +} + +function finishMaybe(stream, state) { + var need = needFinish(stream, state); + if (need) { + state.finished = true; + stream.emit('finish'); + } + return need; +} + +function endWritable(stream, state, cb) { + state.ending = true; + finishMaybe(stream, state); + if (cb) { + if (state.finished) + process.nextTick(cb); + else + stream.once('finish', cb); + } + state.ended = true; +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore new file mode 100644 index 00000000..206320cc --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/.npmignore @@ -0,0 +1,2 @@ +build +test diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE new file mode 100644 index 00000000..6de584a4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/LICENSE @@ -0,0 +1,20 @@ +Copyright Joyent, Inc. and other Node contributors. + +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-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md new file mode 100644 index 00000000..4d2aa001 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/README.md @@ -0,0 +1,7 @@ +**string_decoder.js** (`require('string_decoder')`) from Node.js core + +Copyright Joyent, Inc. and other Node contributors. See LICENCE file for details. + +Version numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. **Prefer the stable version over the unstable.** + +The *build/* directory contains a build script that will scrape the source from the [joyent/node](https://github.com/joyent/node) repo given a specific Node version. \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js new file mode 100644 index 00000000..2e44a03e --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/index.js @@ -0,0 +1,200 @@ +// Copyright Joyent, Inc. and other Node contributors. +// +// 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. + +var Buffer = require('buffer').Buffer; + +var isBufferEncoding = Buffer.isEncoding + || function(encoding) { + switch (encoding && encoding.toLowerCase()) { + case 'hex': case 'utf8': case 'utf-8': case 'ascii': case 'binary': case 'base64': case 'ucs2': case 'ucs-2': case 'utf16le': case 'utf-16le': case 'raw': return true; + default: return false; + } + } + + +function assertEncoding(encoding) { + if (encoding && !isBufferEncoding(encoding)) { + throw new Error('Unknown encoding: ' + encoding); + } +} + +var StringDecoder = exports.StringDecoder = function(encoding) { + this.encoding = (encoding || 'utf8').toLowerCase().replace(/[-_]/, ''); + assertEncoding(encoding); + switch (this.encoding) { + case 'utf8': + // CESU-8 represents each of Surrogate Pair by 3-bytes + this.surrogateSize = 3; + break; + case 'ucs2': + case 'utf16le': + // UTF-16 represents each of Surrogate Pair by 2-bytes + this.surrogateSize = 2; + this.detectIncompleteChar = utf16DetectIncompleteChar; + break; + case 'base64': + // Base-64 stores 3 bytes in 4 chars, and pads the remainder. + this.surrogateSize = 3; + this.detectIncompleteChar = base64DetectIncompleteChar; + break; + default: + this.write = passThroughWrite; + return; + } + + this.charBuffer = new Buffer(6); + this.charReceived = 0; + this.charLength = 0; +}; + + +StringDecoder.prototype.write = function(buffer) { + var charStr = ''; + var offset = 0; + + // if our last write ended with an incomplete multibyte character + while (this.charLength) { + // determine how many remaining bytes this buffer has to offer for this char + var i = (buffer.length >= this.charLength - this.charReceived) ? + this.charLength - this.charReceived : + buffer.length; + + // add the new bytes to the char buffer + buffer.copy(this.charBuffer, this.charReceived, offset, i); + this.charReceived += (i - offset); + offset = i; + + if (this.charReceived < this.charLength) { + // still not enough chars in this buffer? wait for more ... + return ''; + } + + // get the character that was split + charStr = this.charBuffer.slice(0, this.charLength).toString(this.encoding); + + // lead surrogate (D800-DBFF) is also the incomplete character + var charCode = charStr.charCodeAt(charStr.length - 1); + if (charCode >= 0xD800 && charCode <= 0xDBFF) { + this.charLength += this.surrogateSize; + charStr = ''; + continue; + } + this.charReceived = this.charLength = 0; + + // if there are no more bytes in this buffer, just emit our char + if (i == buffer.length) return charStr; + + // otherwise cut off the characters end from the beginning of this buffer + buffer = buffer.slice(i, buffer.length); + break; + } + + var lenIncomplete = this.detectIncompleteChar(buffer); + + var end = buffer.length; + if (this.charLength) { + // buffer the incomplete character bytes we got + buffer.copy(this.charBuffer, 0, buffer.length - lenIncomplete, end); + this.charReceived = lenIncomplete; + end -= lenIncomplete; + } + + charStr += buffer.toString(this.encoding, 0, end); + + var end = charStr.length - 1; + var charCode = charStr.charCodeAt(end); + // lead surrogate (D800-DBFF) is also the incomplete character + if (charCode >= 0xD800 && charCode <= 0xDBFF) { + var size = this.surrogateSize; + this.charLength += size; + this.charReceived += size; + this.charBuffer.copy(this.charBuffer, size, 0, size); + this.charBuffer.write(charStr.charAt(charStr.length - 1), this.encoding); + return charStr.substring(0, end); + } + + // or just emit the charStr + return charStr; +}; + +StringDecoder.prototype.detectIncompleteChar = function(buffer) { + // determine how many bytes we have to check at the end of this buffer + var i = (buffer.length >= 3) ? 3 : buffer.length; + + // Figure out if one of the last i bytes of our buffer announces an + // incomplete char. + for (; i > 0; i--) { + var c = buffer[buffer.length - i]; + + // See http://en.wikipedia.org/wiki/UTF-8#Description + + // 110XXXXX + if (i == 1 && c >> 5 == 0x06) { + this.charLength = 2; + break; + } + + // 1110XXXX + if (i <= 2 && c >> 4 == 0x0E) { + this.charLength = 3; + break; + } + + // 11110XXX + if (i <= 3 && c >> 3 == 0x1E) { + this.charLength = 4; + break; + } + } + + return i; +}; + +StringDecoder.prototype.end = function(buffer) { + var res = ''; + if (buffer && buffer.length) + res = this.write(buffer); + + if (this.charReceived) { + var cr = this.charReceived; + var buf = this.charBuffer; + var enc = this.encoding; + res += buf.slice(0, cr).toString(enc); + } + + return res; +}; + +function passThroughWrite(buffer) { + return buffer.toString(this.encoding); +} + +function utf16DetectIncompleteChar(buffer) { + var incomplete = this.charReceived = buffer.length % 2; + this.charLength = incomplete ? 2 : 0; + return incomplete; +} + +function base64DetectIncompleteChar(buffer) { + var incomplete = this.charReceived = buffer.length % 3; + this.charLength = incomplete ? 3 : 0; + return incomplete; +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json new file mode 100644 index 00000000..7f5d0011 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/node_modules/string_decoder/package.json @@ -0,0 +1,32 @@ +{ + "name": "string_decoder", + "version": "0.10.25-1", + "description": "The string_decoder module from Node core", + "main": "index.js", + "dependencies": {}, + "devDependencies": { + "tap": "~0.4.8" + }, + "scripts": { + "test": "tap test/simple/*.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/rvagg/string_decoder.git" + }, + "homepage": "https://github.com/rvagg/string_decoder", + "keywords": [ + "string", + "decoder", + "browser", + "browserify" + ], + "license": "MIT", + "readme": "**string_decoder.js** (`require('string_decoder')`) from Node.js core\n\nCopyright Joyent, Inc. and other Node contributors. See LICENCE file for details.\n\nVersion numbers match the versions found in Node core, e.g. 0.10.24 matches Node 0.10.24, likewise 0.11.10 matches Node 0.11.10. **Prefer the stable version over the unstable.**\n\nThe *build/* directory contains a build script that will scrape the source from the [joyent/node](https://github.com/joyent/node) repo given a specific Node version.", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/rvagg/string_decoder/issues" + }, + "_id": "string_decoder@0.10.25-1", + "_from": "string_decoder@~0.10.x" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json new file mode 100644 index 00000000..3723fdf3 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/package.json @@ -0,0 +1,42 @@ +{ + "name": "readable-stream", + "version": "1.0.26-2", + "description": "An exploration of a new kind of readable streams for Node.js", + "main": "readable.js", + "dependencies": { + "string_decoder": "~0.10.x" + }, + "devDependencies": { + "tap": "~0.2.6" + }, + "scripts": { + "test": "tap test/simple/*.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/isaacs/readable-stream" + }, + "keywords": [ + "readable", + "stream", + "pipe" + ], + "author": { + "name": "Isaac Z. Schlueter", + "email": "i@izs.me", + "url": "http://blog.izs.me/" + }, + "license": "BSD", + "readme": "# readable-stream\n\n***Node-core streams for userland***\n\n[![NPM](https://nodei.co/npm/readable-stream.png?downloads=true)](https://nodei.co/npm/readable-stream/)\n[![NPM](https://nodei.co/npm-dl/readable-stream.png)](https://nodei.co/npm/readable-stream/)\n\nThis package is a mirror of the Streams2 and Streams3 implementations in Node-core.\n\nIf you want to guarantee a stable streams base, regardless of what version of Node you, or the users of your libraries are using, use **readable-stream** *only* and avoid the *\"stream\"* module in Node-core.\n\n**readable-stream** comes in two major versions, v1.0.x and v1.1.x. The former tracks the Streams2 implementation in Node 0.10, including bug-fixes and minor improvements as they are added. The latter tracks Streams3 as it develops in Node 0.11; we will likely see a v1.2.x branch for Node 0.12.\n\n**readable-stream** uses proper patch-level versioning so if you pin to `\"~1.0.0\"` you’ll get the latest Node 0.10 Streams2 implementation, including any fixes and minor non-breaking improvements. The patch-level versions of 1.0.x and 1.1.x should mirror the patch-level versions of Node-core releases. You should prefer the **1.0.x** releases for now and when you’re ready to start using Streams3, pin to `\"~1.1.0\"`\n\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/isaacs/readable-stream/issues" + }, + "homepage": "https://github.com/isaacs/readable-stream", + "_id": "readable-stream@1.0.26-2", + "dist": { + "shasum": "85dd7415f13356c98300d6d260c3a62fc656b1b1" + }, + "_from": "readable-stream@~1.0.17", + "_resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.26-2.tgz" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js new file mode 100644 index 00000000..27e8d8a5 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/passthrough.js @@ -0,0 +1 @@ +module.exports = require("./lib/_stream_passthrough.js") diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js new file mode 100644 index 00000000..4d1ddfc7 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/readable.js @@ -0,0 +1,6 @@ +exports = module.exports = require('./lib/_stream_readable.js'); +exports.Readable = exports; +exports.Writable = require('./lib/_stream_writable.js'); +exports.Duplex = require('./lib/_stream_duplex.js'); +exports.Transform = require('./lib/_stream_transform.js'); +exports.PassThrough = require('./lib/_stream_passthrough.js'); diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js new file mode 100644 index 00000000..5d482f07 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/transform.js @@ -0,0 +1 @@ +module.exports = require("./lib/_stream_transform.js") diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js new file mode 100644 index 00000000..e1e9efdf --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/readable-stream/writable.js @@ -0,0 +1 @@ +module.exports = require("./lib/_stream_writable.js") diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore new file mode 100644 index 00000000..3c3629e6 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE new file mode 100644 index 00000000..a23e08a8 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/LICENCE @@ -0,0 +1,19 @@ +Copyright (c) 2012 Raynos. + +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-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile new file mode 100644 index 00000000..d583fcf4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/Makefile @@ -0,0 +1,4 @@ +browser: + node ./support/compile + +.PHONY: browser \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md new file mode 100644 index 00000000..389adae3 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/README.md @@ -0,0 +1,27 @@ +# xtend + +[![browser support][3]][4] + +Extend like a boss + +xtend is a basic utility library which allows you to extend an object by appending all of the properties from each object in a list. When there are identical properties, the right-most property takes presedence. + +## Examples + +```js +var extend = require("xtend") + +var combination = extend({ + a: "a" +}, { + b: "b" +}) +// { a: "a", b: "b" } +``` + + +## MIT Licenced + + + [3]: http://ci.testling.com/Raynos/xtend.png + [4]: http://ci.testling.com/Raynos/xtend diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js new file mode 100644 index 00000000..62391e78 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/has-keys.js @@ -0,0 +1,7 @@ +module.exports = hasKeys + +function hasKeys(source) { + return source !== null && + (typeof source === "object" || + typeof source === "function") +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js new file mode 100644 index 00000000..20937d19 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/index.js @@ -0,0 +1,25 @@ +var Keys = require("object-keys") +var hasKeys = require("./has-keys") + +module.exports = extend + +function extend() { + var target = {} + + for (var i = 0; i < arguments.length; i++) { + var source = arguments[i] + + if (!hasKeys(source)) { + continue + } + + var keys = Keys(source) + + for (var j = 0; j < keys.length; j++) { + var name = keys[j] + target[name] = source[name] + } + } + + return target +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js new file mode 100644 index 00000000..17454ae4 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/mutable.js @@ -0,0 +1,25 @@ +var Keys = require("object-keys") +var hasKeys = require("./has-keys") + +module.exports = extend + +function extend(target) { + var sources = [].slice.call(arguments, 1) + + for (var i = 0; i < sources.length; i++) { + var source = sources[i] + + if (!hasKeys(source)) { + continue + } + + var keys = Keys(source) + + for (var j = 0; j < keys.length; j++) { + var name = keys[j] + target[name] = source[name] + } + } + + return target +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore new file mode 100644 index 00000000..3c3629e6 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.npmignore @@ -0,0 +1 @@ +node_modules diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml new file mode 100644 index 00000000..60d00ce1 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/.travis.yml @@ -0,0 +1,5 @@ +language: node_js +node_js: + - "0.10" + - "0.8" + - "0.6" diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md new file mode 100644 index 00000000..ab32d0ad --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/README.md @@ -0,0 +1,39 @@ +#object-keys <sup>[![Version Badge][2]][1]</sup> + +[![Build Status][3]][4] [![dependency status][5]][6] + +[![browser support][7]][8] + +An Object.keys shim. Uses Object.keys if available. + +## Example + +```js +var keys = require('object-keys'); +var assert = require('assert'); +var obj = { + a: true, + b: true, + c: true +}; + +assert.equal(keys(obj), ['a', 'b', 'c']); +``` + +## Source +Implementation taken directly from [es5-shim]([9]), with modifications, including from [lodash]([10]). + +## Tests +Simply clone the repo, `npm install`, and run `npm test` + +[1]: https://npmjs.org/package/object-keys +[2]: http://vb.teelaun.ch/ljharb/object-keys.svg +[3]: https://travis-ci.org/ljharb/object-keys.png +[4]: https://travis-ci.org/ljharb/object-keys +[5]: https://david-dm.org/ljharb/object-keys.png +[6]: https://david-dm.org/ljharb/object-keys +[7]: https://ci.testling.com/ljharb/object-keys.png +[8]: https://ci.testling.com/ljharb/object-keys +[9]: https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js#L542-589 +[10]: https://github.com/bestiejs/lodash + diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js new file mode 100644 index 00000000..db32d458 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/foreach.js @@ -0,0 +1,40 @@ +var hasOwn = Object.prototype.hasOwnProperty; +var toString = Object.prototype.toString; + +var isFunction = function (fn) { + var isFunc = (typeof fn === 'function' && !(fn instanceof RegExp)) || toString.call(fn) === '[object Function]'; + if (!isFunc && typeof window !== 'undefined') { + isFunc = fn === window.setTimeout || fn === window.alert || fn === window.confirm || fn === window.prompt; + } + return isFunc; +}; + +module.exports = function forEach(obj, fn) { + if (!isFunction(fn)) { + throw new TypeError('iterator must be a function'); + } + var i, k, + isString = typeof obj === 'string', + l = obj.length, + context = arguments.length > 2 ? arguments[2] : null; + if (l === +l) { + for (i = 0; i < l; i++) { + if (context === null) { + fn(isString ? obj.charAt(i) : obj[i], i, obj); + } else { + fn.call(context, isString ? obj.charAt(i) : obj[i], i, obj); + } + } + } else { + for (k in obj) { + if (hasOwn.call(obj, k)) { + if (context === null) { + fn(obj[k], k, obj); + } else { + fn.call(context, obj[k], k, obj); + } + } + } + } +}; + diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js new file mode 100644 index 00000000..f5b24b6d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/index.js @@ -0,0 +1,2 @@ +module.exports = Object.keys || require('./shim'); + diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js new file mode 100644 index 00000000..74a09897 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/isArguments.js @@ -0,0 +1,16 @@ +var toString = Object.prototype.toString; + +module.exports = function isArguments(value) { + var str = toString.call(value); + var isArguments = str === '[object Arguments]'; + if (!isArguments) { + isArguments = str !== '[object Array]' + && value !== null + && typeof value === 'object' + && typeof value.length === 'number' + && value.length >= 0 + && toString.call(value.callee) === '[object Function]'; + } + return isArguments; +}; + diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json new file mode 100644 index 00000000..1de9cbb3 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/package.json @@ -0,0 +1,56 @@ +{ + "name": "object-keys", + "version": "0.4.0", + "author": { + "name": "Jordan Harband" + }, + "description": "An Object.keys replacement, in case Object.keys is not available. From https://github.com/kriskowal/es5-shim", + "license": "MIT", + "main": "index.js", + "scripts": { + "test": "node test/index.js" + }, + "repository": { + "type": "git", + "url": "git://github.com/ljharb/object-keys.git" + }, + "keywords": [ + "Object.keys", + "keys", + "ES5", + "shim" + ], + "dependencies": {}, + "devDependencies": { + "foreach": "~2.0.3", + "is": "~0.2.6", + "tape": "~1.0.4", + "indexof": "~0.0.1" + }, + "testling": { + "files": "test/index.js", + "browsers": [ + "iexplore/6.0..latest", + "firefox/3.0..6.0", + "firefox/15.0..latest", + "firefox/nightly", + "chrome/4.0..10.0", + "chrome/20.0..latest", + "chrome/canary", + "opera/10.0..latest", + "opera/next", + "safari/4.0..latest", + "ipad/6.0..latest", + "iphone/6.0..latest", + "android-browser/4.2" + ] + }, + "readme": "#object-keys <sup>[![Version Badge][2]][1]</sup>\n\n[![Build Status][3]][4] [![dependency status][5]][6]\n\n[![browser support][7]][8]\n\nAn Object.keys shim. Uses Object.keys if available.\n\n## Example\n\n```js\nvar keys = require('object-keys');\nvar assert = require('assert');\nvar obj = {\n\ta: true,\n\tb: true,\n\tc: true\n};\n\nassert.equal(keys(obj), ['a', 'b', 'c']);\n```\n\n## Source\nImplementation taken directly from [es5-shim]([9]), with modifications, including from [lodash]([10]).\n\n## Tests\nSimply clone the repo, `npm install`, and run `npm test`\n\n[1]: https://npmjs.org/package/object-keys\n[2]: http://vb.teelaun.ch/ljharb/object-keys.svg\n[3]: https://travis-ci.org/ljharb/object-keys.png\n[4]: https://travis-ci.org/ljharb/object-keys\n[5]: https://david-dm.org/ljharb/object-keys.png\n[6]: https://david-dm.org/ljharb/object-keys\n[7]: https://ci.testling.com/ljharb/object-keys.png\n[8]: https://ci.testling.com/ljharb/object-keys\n[9]: https://github.com/kriskowal/es5-shim/blob/master/es5-shim.js#L542-589\n[10]: https://github.com/bestiejs/lodash\n\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/ljharb/object-keys/issues" + }, + "homepage": "https://github.com/ljharb/object-keys", + "_id": "object-keys@0.4.0", + "_from": "object-keys@~0.4.0" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js new file mode 100644 index 00000000..b88421be --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/shim.js @@ -0,0 +1,62 @@ +(function () { + "use strict"; + + // modified from https://github.com/kriskowal/es5-shim + var has = Object.prototype.hasOwnProperty, + toString = Object.prototype.toString, + forEach = require('./foreach'), + isArgs = require('./isArguments'), + hasDontEnumBug = !({'toString': null}).propertyIsEnumerable('toString'), + hasProtoEnumBug = (function () {}).propertyIsEnumerable('prototype'), + dontEnums = [ + "toString", + "toLocaleString", + "valueOf", + "hasOwnProperty", + "isPrototypeOf", + "propertyIsEnumerable", + "constructor" + ], + keysShim; + + keysShim = function keys(object) { + var isObject = object !== null && typeof object === 'object', + isFunction = toString.call(object) === '[object Function]', + isArguments = isArgs(object), + theKeys = []; + + if (!isObject && !isFunction && !isArguments) { + throw new TypeError("Object.keys called on a non-object"); + } + + if (isArguments) { + forEach(object, function (value) { + theKeys.push(value); + }); + } else { + var name, + skipProto = hasProtoEnumBug && isFunction; + + for (name in object) { + if (!(skipProto && name === 'prototype') && has.call(object, name)) { + theKeys.push(name); + } + } + } + + if (hasDontEnumBug) { + var ctor = object.constructor, + skipConstructor = ctor && ctor.prototype === object; + + forEach(dontEnums, function (dontEnum) { + if (!(skipConstructor && dontEnum === 'constructor') && has.call(object, dontEnum)) { + theKeys.push(dontEnum); + } + }); + } + return theKeys; + }; + + module.exports = keysShim; +}()); + diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js new file mode 100644 index 00000000..f29f065a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/foreach.js @@ -0,0 +1,156 @@ +var test = require('tape'); +var forEach = require('../foreach.js'); + +test('second argument: iterator', function (t) { + var arr = []; + t.throws(function () { forEach(arr); }, TypeError, 'undefined is not a function'); + t.throws(function () { forEach(arr, null); }, TypeError, 'null is not a function'); + t.throws(function () { forEach(arr, ''); }, TypeError, 'string is not a function'); + t.throws(function () { forEach(arr, /a/); }, TypeError, 'regex is not a function'); + t.throws(function () { forEach(arr, true); }, TypeError, 'true is not a function'); + t.throws(function () { forEach(arr, false); }, TypeError, 'false is not a function'); + t.throws(function () { forEach(arr, NaN); }, TypeError, 'NaN is not a function'); + t.throws(function () { forEach(arr, 42); }, TypeError, '42 is not a function'); + t.doesNotThrow(function () { forEach(arr, function () {}); }, 'function is a function'); + t.doesNotThrow(function () { forEach(arr, setTimeout); }, 'setTimeout is a function'); + if (typeof window !== 'undefined') { + t.doesNotThrow(function () { forEach(arr, window.alert); }, 'alert is a function'); + } + t.end(); +}); + +test('array', function (t) { + var arr = [1, 2, 3]; + + t.test('iterates over every item', function (st) { + var index = 0; + forEach(arr, function () { index += 1; }); + st.equal(index, arr.length, 'iterates ' + arr.length + ' times'); + st.end(); + }); + + t.test('first iterator argument', function (st) { + var index = 0; + st.plan(arr.length); + forEach(arr, function (item) { + st.equal(arr[index], item, 'item ' + index + ' is passed as first argument'); + index += 1; + }); + st.end(); + }); + + t.test('second iterator argument', function (st) { + var counter = 0; + st.plan(arr.length); + forEach(arr, function (item, index) { + st.equal(counter, index, 'index ' + index + ' is passed as second argument'); + counter += 1; + }); + st.end(); + }); + + t.test('third iterator argument', function (st) { + st.plan(arr.length); + forEach(arr, function (item, index, array) { + st.deepEqual(arr, array, 'array is passed as third argument'); + }); + st.end(); + }); + + t.test('context argument', function (st) { + var context = {}; + st.plan(arr.length); + forEach(arr, function () { + st.equal(this, context, '"this" is the passed context'); + }, context); + st.end(); + }); + + t.end(); +}); + +test('object', function (t) { + var obj = { + a: 1, + b: 2, + c: 3 + }; + var keys = ['a', 'b', 'c']; + + var F = function () { + this.a = 1; + this.b = 2; + }; + F.prototype.c = 3; + var fKeys = ['a', 'b']; + + t.test('iterates over every object literal key', function (st) { + var counter = 0; + forEach(obj, function () { counter += 1; }); + st.equal(counter, keys.length, 'iterated ' + counter + ' times'); + st.end(); + }); + + t.test('iterates only over own keys', function (st) { + var counter = 0; + forEach(new F(), function () { counter += 1; }); + st.equal(counter, fKeys.length, 'iterated ' + fKeys.length + ' times'); + st.end(); + }); + + t.test('first iterator argument', function (st) { + var index = 0; + st.plan(keys.length); + forEach(obj, function (item) { + st.equal(obj[keys[index]], item, 'item at key ' + keys[index] + ' is passed as first argument'); + index += 1; + }); + st.end(); + }); + + t.test('second iterator argument', function (st) { + var counter = 0; + st.plan(keys.length); + forEach(obj, function (item, key) { + st.equal(keys[counter], key, 'key ' + key + ' is passed as second argument'); + counter += 1; + }); + st.end(); + }); + + t.test('third iterator argument', function (st) { + st.plan(keys.length); + forEach(obj, function (item, key, object) { + st.deepEqual(obj, object, 'object is passed as third argument'); + }); + st.end(); + }); + + t.test('context argument', function (st) { + var context = {}; + st.plan(1); + forEach({foo: 'bar'}, function () { + st.equal(this, context, '"this" is the passed context'); + }, context); + st.end(); + }); + + t.end(); +}); + + +test('string', function (t) { + var str = 'str'; + t.test('second iterator argument', function (st) { + var counter = 0; + st.plan(str.length * 2 + 1); + forEach(str, function (item, index) { + st.equal(counter, index, 'index ' + index + ' is passed as second argument'); + st.equal(str.charAt(index), item); + counter += 1; + }); + st.equal(counter, str.length, 'iterates ' + str.length + ' times'); + }); + t.end(); +}); + diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js new file mode 100644 index 00000000..8b77b1fc --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/index.js @@ -0,0 +1,6 @@ + +require('./foreach'); +require('./isArguments'); + +require('./shim'); + diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js new file mode 100644 index 00000000..62a07c2d --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/isArguments.js @@ -0,0 +1,10 @@ +var test = require('tape'); +var isArguments = require('../isArguments'); + +test('is.arguments', function (t) { + t.notOk(isArguments([]), 'array is not arguments'); + (function () { t.ok(isArguments(arguments), 'arguments is arguments'); }()); + (function () { t.notOk(isArguments(Array.prototype.slice.call(arguments)), 'sliced arguments is not arguments'); }()); + t.end(); +}); + diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js new file mode 100644 index 00000000..9d932712 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/node_modules/object-keys/test/shim.js @@ -0,0 +1,134 @@ +var test = require('tape'); +var shimmedKeys = require('../index.js'); +var is = require('is'); +var keys = require('../shim.js'); +var forEach = require('foreach'); +var indexOf = require('indexof'); + +var obj = { + "str": "boz", + "obj": {}, + "arr": [], + "bool": true, + "num": 42, + "aNull": null, + "undef": undefined +}; +var objKeys = ['str', 'obj', 'arr', 'bool', 'num', 'aNull', 'undef']; + +test('exports a function', function (t) { + if (Object.keys) { + t.equal(Object.keys, shimmedKeys, 'Object.keys is supported and exported'); + } else { + t.equal(keys, shimmedKeys, 'Object.keys is not supported; shim is exported'); + } + t.end(); +}); + +test('working with actual shim', function (t) { + t.notEqual(Object.keys, keys, 'keys shim is not native Object.keys'); + t.end(); +}); + +test('works with an object literal', function (t) { + var theKeys = keys(obj); + t.equal(is.array(theKeys), true, 'returns an array'); + t.deepEqual(theKeys, objKeys, 'Object has expected keys'); + t.end(); +}); + +test('works with an array', function (t) { + var arr = [1, 2, 3]; + var theKeys = keys(arr); + t.equal(is.array(theKeys), true, 'returns an array'); + t.deepEqual(theKeys, ['0', '1', '2'], 'Array has expected keys'); + t.end(); +}); + +test('works with a function', function (t) { + var foo = function () {}; + foo.a = true; + + t.doesNotThrow(function () { return keys(foo); }, 'does not throw an error'); + t.deepEqual(keys(foo), ['a'], 'returns expected keys'); + t.end(); +}); + +test('returns names which are own properties', function (t) { + forEach(keys(obj), function (name) { + t.equal(obj.hasOwnProperty(name), true, name + ' should be returned'); + }); + t.end(); +}); + +test('returns names which are enumerable', function (t) { + var k, loopedValues = []; + for (k in obj) { + loopedValues.push(k); + } + forEach(keys(obj), function (name) { + t.notEqual(indexOf(loopedValues, name), -1, name + ' is not enumerable'); + }); + t.end(); +}); + +test('throws an error for a non-object', function (t) { + t.throws( + function () { return keys(42); }, + new TypeError('Object.keys called on a non-object'), + 'throws on a non-object' + ); + t.end(); +}); + +test('works with an object instance', function (t) { + var Prototype = function () {}; + Prototype.prototype.foo = true; + var obj = new Prototype(); + obj.bar = true; + var theKeys = keys(obj); + t.equal(is.array(theKeys), true, 'returns an array'); + t.deepEqual(theKeys, ['bar'], 'Instance has expected keys'); + t.end(); +}); + +test('works in iOS 5 mobile Safari', function (t) { + var Foo = function () {}; + Foo.a = function () {}; + + // the bug is keys(Foo) => ['a', 'prototype'] instead of ['a'] + t.deepEqual(keys(Foo), ['a'], 'has expected keys'); + t.end(); +}); + +test('works in environments with the dontEnum bug (IE < 9)', function (t) { + var Foo = function () {}; + Foo.prototype.a = function () {}; + + // the bug is keys(Foo.prototype) => ['a', 'constructor'] instead of ['a'] + t.deepEqual(keys(Foo.prototype), ['a'], 'has expected keys'); + t.end(); +}); + +test('shadowed properties', function (t) { + var shadowedProps = [ + 'dummyControlProp', /* just to be sure */ + 'constructor', + 'hasOwnProperty', + 'isPrototypeOf', + 'propertyIsEnumerable', + 'toLocaleString', + 'toString', + 'valueOf' + ]; + shadowedProps.sort(); + var shadowedObject = {}; + forEach(shadowedProps, function (value, index) { + shadowedObject[value] = index; + }); + var shadowedObjectKeys = keys(shadowedObject); + shadowedObjectKeys.sort(); + t.deepEqual(shadowedObjectKeys, shadowedProps, 'troublesome shadowed properties are keys of object literals'); + t.end(); +}); + diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json new file mode 100644 index 00000000..c52e4efc --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/package.json @@ -0,0 +1,72 @@ +{ + "name": "xtend", + "version": "2.1.2", + "description": "extend like a boss", + "keywords": [ + "extend", + "merge", + "options", + "opts", + "object", + "array" + ], + "author": { + "name": "Raynos", + "email": "raynos2@gmail.com" + }, + "repository": { + "type": "git", + "url": "git://github.com/Raynos/xtend.git" + }, + "main": "index", + "scripts": { + "test": "node test" + }, + "dependencies": { + "object-keys": "~0.4.0" + }, + "devDependencies": { + "tape": "~1.1.0" + }, + "homepage": "https://github.com/Raynos/xtend", + "contributors": [ + { + "name": "Jake Verbaten" + }, + { + "name": "Matt Esch" + } + ], + "bugs": { + "url": "https://github.com/Raynos/xtend/issues", + "email": "raynos2@gmail.com" + }, + "licenses": [ + { + "type": "MIT", + "url": "http://github.com/raynos/xtend/raw/master/LICENSE" + } + ], + "testling": { + "files": "test.js", + "browsers": [ + "ie/7..latest", + "firefox/16..latest", + "firefox/nightly", + "chrome/22..latest", + "chrome/canary", + "opera/12..latest", + "opera/next", + "safari/5.1..latest", + "ipad/6.0..latest", + "iphone/6.0..latest" + ] + }, + "engines": { + "node": ">=0.4" + }, + "readme": "# xtend\n\n[![browser support][3]][4]\n\nExtend like a boss\n\nxtend is a basic utility library which allows you to extend an object by appending all of the properties from each object in a list. When there are identical properties, the right-most property takes presedence.\n\n## Examples\n\n```js\nvar extend = require(\"xtend\")\n\nvar combination = extend({\n a: \"a\"\n}, {\n b: \"b\"\n})\n// { a: \"a\", b: \"b\" }\n```\n\n\n## MIT Licenced\n\n\n [3]: http://ci.testling.com/Raynos/xtend.png\n [4]: http://ci.testling.com/Raynos/xtend\n", + "readmeFilename": "README.md", + "_id": "xtend@2.1.2", + "_from": "xtend@~2.1.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js new file mode 100644 index 00000000..3369d796 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/node_modules/xtend/test.js @@ -0,0 +1,63 @@ +var test = require("tape") +var extend = require("./") +var mutableExtend = require("./mutable") + +test("merge", function(assert) { + var a = { a: "foo" } + var b = { b: "bar" } + + assert.deepEqual(extend(a, b), { a: "foo", b: "bar" }) + assert.end() +}) + +test("replace", function(assert) { + var a = { a: "foo" } + var b = { a: "bar" } + + assert.deepEqual(extend(a, b), { a: "bar" }) + assert.end() +}) + +test("undefined", function(assert) { + var a = { a: undefined } + var b = { b: "foo" } + + assert.deepEqual(extend(a, b), { a: undefined, b: "foo" }) + assert.deepEqual(extend(b, a), { a: undefined, b: "foo" }) + assert.end() +}) + +test("handle 0", function(assert) { + var a = { a: "default" } + var b = { a: 0 } + + assert.deepEqual(extend(a, b), { a: 0 }) + assert.deepEqual(extend(b, a), { a: "default" }) + assert.end() +}) + +test("is immutable", function (assert) { + var record = {} + + extend(record, { foo: "bar" }) + assert.equal(record.foo, undefined) + assert.end() +}) + +test("null as argument", function (assert) { + var a = { foo: "bar" } + var b = null + var c = void 0 + + assert.deepEqual(extend(b, a, c), { foo: "bar" }) + assert.end() +}) + +test("mutable", function (assert) { + var a = { foo: "bar" } + + mutableExtend(a, { bar: "baz" }) + + assert.equal(a.bar, "baz") + assert.end() +}) diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/package.json new file mode 100644 index 00000000..3d0e0c8b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/package.json @@ -0,0 +1,44 @@ +{ + "name": "through2", + "version": "0.4.1", + "description": "A tiny wrapper around Node streams2 Transform to avoid explicit subclassing noise", + "main": "through2.js", + "scripts": { + "test": "node test/test.js", + "test-local": "brtapsauce-local test/basic-test.js" + }, + "repository": { + "type": "git", + "url": "https://github.com/rvagg/through2.git" + }, + "keywords": [ + "stream", + "streams2", + "through", + "transform" + ], + "author": { + "name": "Rod Vagg", + "email": "r@va.gg", + "url": "https://github.com/rvagg" + }, + "license": "MIT", + "dependencies": { + "readable-stream": "~1.0.17", + "xtend": "~2.1.1" + }, + "devDependencies": { + "tape": "~2.3.0", + "bl": "~0.6.0", + "stream-spigot": "~3.0.1", + "brtapsauce": "~0.2.2" + }, + "readme": "# through2\n\n<!--\n\nsoon ...\n\n[![Build Status](https://secure.travis-ci.org/rvagg/through2.png)](http://travis-ci.org/rvagg/through2)\n\n[![Build Status](https://saucelabs.com/browser-matrix/through2-sauce.svg)](https://travis-ci.org/rvagg/through2)\n\n-->\n\n[![NPM](https://nodei.co/npm/through2.png?compact=true)](https://nodei.co/npm/through2/) \n\n<!--\nnot happy with these, we need to peg to readable-stream@1.0.x so it'll always report out-of-date\n\n[![david-dm](https://david-dm.org/rvagg/through2.png)](https://david-dm.org/rvagg/through2/)\n[![david-dm](https://david-dm.org/rvagg/through2/dev-status.png)](https://david-dm.org/rvagg/through2#info=devDependencies/)\n-->\n\n**A tiny wrapper around Node streams.Transform (Streams2) to avoid explicit subclassing noise**\n\nInspired by [Dominic Tarr](https://github.com/dominictarr)'s [through](https://github.com/dominictarr/through) in that it's so much easier to make a stream out of a function than it is to set up the prototype chain properly: `through(function (chunk) { ... })`.\n\n```js\nfs.createReadStream('ex.txt')\n .pipe(through2(function (chunk, enc, callback) {\n\n for (var i = 0; i < chunk.length; i++)\n if (chunk[i] == 97)\n chunk[i] = 122 // swap 'a' for 'z'\n\n this.push(chunk)\n \n callback()\n\n }))\n .pipe(fs.createWriteStream('out.txt'))\n```\n\nOr object streams:\n\n```js\nvar all = []\n\nfs.createReadStream('data.csv')\n .pipe(csv2())\n .pipe(through2.obj(function (chunk, enc, callback) {\n\n var data = {\n name : chunk[0]\n , address : chunk[3]\n , phone : chunk[10]\n }\n \n this.push(data)\n \n callback()\n\n }))\n .on('data', function (data) {\n all.push(data)\n })\n .on('end', function () {\n doSomethingSpecial(all)\n })\n```\n\nNote that `through2.obj(fn)` is a convenience wrapper around `through2({ objectMode: true }, fn)`.\n\n## API\n\n<b><code>through2([ options, ] [ transformFunction ] [, flushFunction ])</code></b>\n\nConsult the **[stream.Transform](http://nodejs.org/docs/latest/api/stream.html#stream_class_stream_transform)** documentation for the exact rules of the `transformFunction` (i.e. `this._transform`) and the optional `flushFunction` (i.e. `this._flush`).\n\n### options\n\nThe options argument is optional and is passed straight through to `stream.Transform`. So you can use `objectMode:true` if you are processing non-binary streams (or just use `through2.obj()`).\n\nThe `options` argument is first, unlike standard convention, because if I'm passing in an anonymous function then I'd prefer for the options argument to not get lost at the end of the call:\n\n```js\nfs.createReadStream('/tmp/important.dat')\n .pipe(through2({ objectMode: true, allowHalfOpen: false }, function (chunk, enc, cb) {\n\n this.push(new Buffer('wut?'))\n cb()\n\n })\n .pipe(fs.createWriteStream('/tmp/wut.txt'))\n```\n\n### transformFunction\n\nThe `transformFunction` must have the following signature: `function (chunk, encoding, callback) {}`. A minimal implementation should call the `callback` function to indicate that the transformation is done, even if that transformation means discarding the chunk.\n\nTo queue a new chunk, call `this.push(chunk)`—this can be called as many times as required before the `callback()` if you have multiple pieces to send on.\n\nIf you **do not provide a `transformFunction`** then you will get a simple simple pass-through stream.\n\n### flushFunction\n\nThe optional `flushFunction` is provided as the last argument (2nd or 3rd, depending on whether you've supplied options) is called just prior to the stream ending. Can be used to finish up any processing that may be in progress.\n\n<b><code>through2.ctor([ options, ] transformFunction[, flushFunction ])</code></b>\n\nInstead of returning a `stream.Transform` instance, `through2.ctor()` returns a **constructor** for a custom Transform. This is useful when you want to use the same transform logic in multiple instances.\n\n```js\nvar FToC = through2.ctor({objectMode: true}, function (record, encoding, callback) {\n if (record.temp != null && record.unit = \"F\") {\n record.temp = ( ( record.temp - 32 ) * 5 ) / 9\n record.unit = \"C\"\n }\n this.push(record)\n callback()\n})\n\n// Create instances of FToC like so:\nvar converter = new FToC()\n// Or:\nvar converter = FToC()\n// Or specify/override options when you instantiate, if you prefer:\nvar converter = FToC({objectMode: true})\n```\n\n## License\n\n**through2** is Copyright (c) 2013 Rod Vagg [@rvagg](https://twitter.com/rvagg) and licenced under the MIT licence. All rights not explicitly granted in the MIT license are reserved. See the included LICENSE file for more details.\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/rvagg/through2/issues" + }, + "homepage": "https://github.com/rvagg/through2", + "_id": "through2@0.4.1", + "_from": "through2@~0.4.0" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/basic-test.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/basic-test.js new file mode 100644 index 00000000..9d137c7f --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/basic-test.js @@ -0,0 +1,334 @@ +const test = require('tape') + , through2 = require('../') + , crypto = require('crypto') + , bl = require('bl') + , spigot = require('stream-spigot') + +test('plain through', function (t) { + var th2 = through2(function (chunk, enc, callback) { + if (!this._i) + this._i = 97 // 'a' + else + this._i++ + var b = new Buffer(chunk.length) + for (var i = 0; i < chunk.length; i++) + b[i] = this._i + this.push(b) + callback() + }) + + th2.pipe(bl(function (err, b) { + var s = b.toString('ascii') + t.equal('aaaaaaaaaabbbbbcccccccccc', s, 'got transformed string') + t.end() + })) + + th2.write(crypto.randomBytes(10)) + th2.write(crypto.randomBytes(5)) + th2.write(crypto.randomBytes(10)) + th2.end() +}) + +test('pipeable through', function (t) { + var th2 = through2(function (chunk, enc, callback) { + if (!this._i) + this._i = 97 // 'a' + else + this._i++ + var b = new Buffer(chunk.length) + for (var i = 0; i < chunk.length; i++) + b[i] = this._i + this.push(b) + callback() + }) + + th2.pipe(bl(function (err, b) { + var s = b.toString('ascii') + // bl() acts like a proper streams2 stream and passes as much as it's + // asked for, so we really only get one write with such a small amount + // of data + t.equal(s, 'aaaaaaaaaaaaaaaaaaaaaaaaa', 'got transformed string') + t.end() + })) + + var bufs = bl() + bufs.append(crypto.randomBytes(10)) + bufs.append(crypto.randomBytes(5)) + bufs.append(crypto.randomBytes(10)) + bufs.pipe(th2) +}) + +test('object through', function (t) { + t.plan(3) + + var th2 = through2({ objectMode: true}, function (chunk, enc, callback) { + this.push({ out: chunk.in + 1 }) + callback() + }) + + var e = 0 + th2.on('data', function (o) { + t.deepEqual(o, { out: e === 0 ? 102 : e == 1 ? 203 : -99 }, 'got transformed object') + e++ + }) + + th2.write({ in: 101 }) + th2.write({ in: 202 }) + th2.write({ in: -100 }) + th2.end() +}) + +test('object through with through2.obj', function (t) { + t.plan(3) + + var th2 = through2.obj(function (chunk, enc, callback) { + this.push({ out: chunk.in + 1 }) + callback() + }) + + var e = 0 + th2.on('data', function (o) { + t.deepEqual(o, { out: e === 0 ? 102 : e == 1 ? 203 : -99 }, 'got transformed object') + e++ + }) + + th2.write({ in: 101 }) + th2.write({ in: 202 }) + th2.write({ in: -100 }) + th2.end() +}) + +test('flushing through', function (t) { + var th2 = through2(function (chunk, enc, callback) { + if (!this._i) + this._i = 97 // 'a' + else + this._i++ + var b = new Buffer(chunk.length) + for (var i = 0; i < chunk.length; i++) + b[i] = this._i + this.push(b) + callback() + }, function (callback) { + this.push(new Buffer([ 101, 110, 100 ])) + callback() + }) + + th2.pipe(bl(function (err, b) { + var s = b.toString('ascii') + t.equal(s, 'aaaaaaaaaabbbbbccccccccccend', 'got transformed string') + t.end() + })) + + th2.write(crypto.randomBytes(10)) + th2.write(crypto.randomBytes(5)) + th2.write(crypto.randomBytes(10)) + th2.end() +}) + +test('plain through ctor', function (t) { + var Th2 = through2.ctor(function (chunk, enc, callback) { + if (!this._i) + this._i = 97 // 'a' + else + this._i++ + var b = new Buffer(chunk.length) + for (var i = 0; i < chunk.length; i++) + b[i] = this._i + this.push(b) + callback() + }) + + var th2 = new Th2() + + th2.pipe(bl(function (err, b) { + var s = b.toString('ascii') + t.equal('aaaaaaaaaabbbbbcccccccccc', s, 'got transformed string') + t.end() + })) + + th2.write(crypto.randomBytes(10)) + th2.write(crypto.randomBytes(5)) + th2.write(crypto.randomBytes(10)) + th2.end() +}) + +test('reuse through ctor', function (t) { + t.plan(4) + + var Th2 = through2.ctor(function (chunk, enc, callback) { + if (!this._i) { + t.ok(1, 'did not contain previous instance data (this._i)') + this._i = 97 // 'a' + } else + this._i++ + var b = new Buffer(chunk.length) + for (var i = 0; i < chunk.length; i++) + b[i] = this._i + this.push(b) + callback() + }) + + var th2 = Th2() + + th2.pipe(bl(function (err, b) { + var s = b.toString('ascii') + t.equal('aaaaaaaaaabbbbbcccccccccc', s, 'got transformed string') + + var newInstance = Th2() + newInstance.pipe(bl(function (err, b) { + var s = b.toString('ascii') + t.equal('aaaaaaabbbbccccccc', s, 'got transformed string') + })) + + newInstance.write(crypto.randomBytes(7)) + newInstance.write(crypto.randomBytes(4)) + newInstance.write(crypto.randomBytes(7)) + newInstance.end() + })) + + th2.write(crypto.randomBytes(10)) + th2.write(crypto.randomBytes(5)) + th2.write(crypto.randomBytes(10)) + th2.end() +}) + +test('object through ctor', function (t) { + t.plan(3) + + var Th2 = through2.ctor({ objectMode: true}, function (chunk, enc, callback) { + this.push({ out: chunk.in + 1 }) + callback() + }) + + var th2 = new Th2() + + var e = 0 + th2.on('data', function (o) { + t.deepEqual(o, { out: e === 0 ? 102 : e == 1 ? 203 : -99 }, 'got transformed object') + e++ + }) + + th2.write({ in: 101 }) + th2.write({ in: 202 }) + th2.write({ in: -100 }) + th2.end() +}) + +test('pipeable object through ctor', function (t) { + t.plan(4) + + var Th2 = through2.ctor({ objectMode: true}, function (record, enc, callback) { + if (record.temp != null && record.unit == 'F') { + record.temp = ( ( record.temp - 32 ) * 5 ) / 9 + record.unit = 'C' + } + this.push(record) + callback() + }) + + var th2 = Th2() + + var expect = [-19, -40, 100, 22] + th2.on('data', function (o) { + t.deepEqual(o, { temp: expect.shift(), unit: 'C' }, 'got transformed object') + }) + + spigot({objectMode: true}, [ + {temp: -2.2, unit: 'F'}, + {temp: -40, unit: 'F'}, + {temp: 212, unit: 'F'}, + {temp: 22, unit: 'C'} + ]).pipe(th2) +}) + +test('object through ctor override', function (t) { + t.plan(3) + + var Th2 = through2.ctor(function (chunk, enc, callback) { + this.push({ out: chunk.in + 1 }) + callback() + }) + + var th2 = Th2({objectMode: true}) + + var e = 0 + th2.on('data', function (o) { + t.deepEqual(o, { out: e === 0 ? 102 : e == 1 ? 203 : -99 }, 'got transformed object') + e++ + }) + + th2.write({ in: 101 }) + th2.write({ in: 202 }) + th2.write({ in: -100 }) + th2.end() +}) + +test('object settings available in transform', function (t) { + t.plan(6) + + var Th2 = through2.ctor({objectMode: true, peek: true}, function (chunk, enc, callback) { + t.ok(this.options.peek, "reading options from inside _transform") + this.push({ out: chunk.in + 1 }) + callback() + }) + + var th2 = Th2() + + var e = 0 + th2.on('data', function (o) { + t.deepEqual(o, { out: e === 0 ? 102 : e == 1 ? 203 : -99 }, 'got transformed object') + e++ + }) + + th2.write({ in: 101 }) + th2.write({ in: 202 }) + th2.write({ in: -100 }) + th2.end() +}) + +test('object settings available in transform override', function (t) { + t.plan(6) + + var Th2 = through2.ctor(function (chunk, enc, callback) { + t.ok(this.options.peek, "reading options from inside _transform") + this.push({ out: chunk.in + 1 }) + callback() + }) + + var th2 = Th2({objectMode: true, peek: true}) + + var e = 0 + th2.on('data', function (o) { + t.deepEqual(o, { out: e === 0 ? 102 : e == 1 ? 203 : -99 }, 'got transformed object') + e++ + }) + + th2.write({ in: 101 }) + th2.write({ in: 202 }) + th2.write({ in: -100 }) + th2.end() +}) + +test('object override extends options', function (t) { + t.plan(6) + + var Th2 = through2.ctor({objectMode: true}, function (chunk, enc, callback) { + t.ok(this.options.peek, "reading options from inside _transform") + this.push({ out: chunk.in + 1 }) + callback() + }) + + var th2 = Th2({peek: true}) + + var e = 0 + th2.on('data', function (o) { + t.deepEqual(o, { out: e === 0 ? 102 : e == 1 ? 203 : -99 }, 'got transformed object') + e++ + }) + + th2.write({ in: 101 }) + th2.write({ in: 202 }) + th2.write({ in: -100 }) + th2.end() +}) \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/bench.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/bench.js new file mode 100644 index 00000000..cc10868b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/bench.js @@ -0,0 +1,42 @@ +/* +on rvagg@fletcher: + @0.2.3: Ran 36719 iterations in 10000 ms +*/ + +const through2 = require('../') + , bl = require('bl') + , crypto = require('crypto') + , assert = require('assert') + +function run (callback) { + var bufs = Array.apply(null, Array(10)).map(function () { return crypto.randomBytes(32) }) + , stream = through2(function (chunk, env, callback) { + callback(null, chunk.toString('hex')) + }) + + stream.pipe(bl(function (err, data) { + assert(!err) + assert.equal(data.toString(), Buffer.concat(bufs).toString('hex')) + callback() + })) + + bufs.forEach(function (b) { + stream.write(b) + }) + stream.end() +} + +var count = 0 + , start = Date.now() + +;(function exec () { + count++ + run(function () { + if (Date.now() - start < 1000 * 10) { + return setImmediate(exec) + } + console.log('Ran', count, 'iterations in', Date.now() - start, 'ms') + }) +}()) + +console.log('Running for ~10s') \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/sauce.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/sauce.js new file mode 100644 index 00000000..a6d28625 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/sauce.js @@ -0,0 +1,38 @@ +#!/usr/bin/env node + +const user = process.env.SAUCE_USER + , key = process.env.SAUCE_KEY + , path = require('path') + , brtapsauce = require('brtapsauce') + , testFile = path.join(__dirname, 'basic-test.js') + + , capabilities = [ + { browserName: 'chrome' , platform: 'Windows XP', version: '' } + , { browserName: 'firefox' , platform: 'Windows 8' , version: '' } + , { browserName: 'firefox' , platform: 'Windows XP', version: '4' } + , { browserName: 'internet explorer' , platform: 'Windows 8' , version: '10' } + , { browserName: 'internet explorer' , platform: 'Windows 7' , version: '9' } + , { browserName: 'internet explorer' , platform: 'Windows 7' , version: '8' } + , { browserName: 'internet explorer' , platform: 'Windows XP', version: '7' } + , { browserName: 'internet explorer' , platform: 'Windows XP', version: '6' } + , { browserName: 'safari' , platform: 'Windows 7' , version: '5' } + , { browserName: 'safari' , platform: 'OS X 10.8' , version: '6' } + , { browserName: 'opera' , platform: 'Windows 7' , version: '' } + , { browserName: 'opera' , platform: 'Windows 7' , version: '11' } + , { browserName: 'ipad' , platform: 'OS X 10.8' , version: '6' } + , { browserName: 'android' , platform: 'Linux' , version: '4.0', 'device-type': 'tablet' } + ] + +if (!user) + throw new Error('Must set a SAUCE_USER env var') +if (!key) + throw new Error('Must set a SAUCE_KEY env var') + +brtapsauce({ + name : 'Traversty' + , user : user + , key : key + , brsrc : testFile + , capabilities : capabilities + , options : { timeout: 60 * 6 } +}) \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/test.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/test.js new file mode 100644 index 00000000..aa9b4877 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/test/test.js @@ -0,0 +1,9 @@ +require('./basic-test') + +if (!process.env.SAUCE_KEY || !process.env.SAUCE_USER) + return console.log('SAUCE_KEY and/or SAUCE_USER not set, not running sauce tests') + +if (!/v0\.10/.test(process.version)) + return console.log('Not Node v0.10.x, not running sauce tests') + +require('./sauce.js') \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/through2.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/through2.js new file mode 100644 index 00000000..c1104848 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/through2/through2.js @@ -0,0 +1,78 @@ +var Transform = require('readable-stream/transform') + , inherits = require('util').inherits + , xtend = require('xtend') + + +// a noop _transform function +function noop (chunk, enc, callback) { + callback(null, chunk) +} + + +// create a new export function, used by both the main export and +// the .ctor export, contains common logic for dealing with arguments +function through2 (construct) { + return function (options, transform, flush) { + if (typeof options == 'function') { + flush = transform + transform = options + options = {} + } + + if (typeof transform != 'function') + transform = noop + + if (typeof flush != 'function') + flush = null + + return construct(options, transform, flush) + } +} + + +// main export, just make me a transform stream! +module.exports = through2(function (options, transform, flush) { + var t2 = new Transform(options) + + t2._transform = transform + + if (flush) + t2._flush = flush + + return t2 +}) + + +// make me a reusable prototype that I can `new`, or implicitly `new` +// with a constructor call +module.exports.ctor = through2(function (options, transform, flush) { + function Through2 (override) { + if (!(this instanceof Through2)) + return new Through2(override) + + this.options = xtend(options, override) + + Transform.call(this, this.options) + } + + inherits(Through2, Transform) + + Through2.prototype._transform = transform + + if (flush) + Through2.prototype._flush = flush + + return Through2 +}) + + +module.exports.obj = through2(function (options, transform, flush) { + var t2 = new Transform(xtend({ objectMode: true }, options)) + + t2._transform = transform + + if (flush) + t2._flush = flush + + return t2 +}) diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/.npmignore b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/.npmignore new file mode 100644 index 00000000..b5ef13a3 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/.travis.yml b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/.travis.yml new file mode 100644 index 00000000..33ad9f8c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/LICENSE b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/LICENSE new file mode 100755 index 00000000..4f482f9b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/README.md new file mode 100644 index 00000000..3f97efc5 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/index.js new file mode 100644 index 00000000..97f5c752 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/cloneBuffer.js new file mode 100644 index 00000000..3a861f22 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/inspectStream.js new file mode 100644 index 00000000..2c906789 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isBuffer.js new file mode 100644 index 00000000..0e23782c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isNull.js new file mode 100644 index 00000000..403bb30e --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/lib/isStream.js new file mode 100644 index 00000000..9ce0929b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md new file mode 100644 index 00000000..146cb32a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/LICENSE.md @@ -0,0 +1,21 @@ +## The MIT License (MIT) ## + +Copyright (c) 2014 Hugh Kennedy + +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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md new file mode 100644 index 00000000..8b12b6fa --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/README.md @@ -0,0 +1,17 @@ +# clone-stats [![Flattr this!](https://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=hughskennedy&url=http://github.com/hughsk/clone-stats&title=clone-stats&description=hughsk/clone-stats%20on%20GitHub&language=en_GB&tags=flattr,github,javascript&category=software)[![experimental](http://hughsk.github.io/stability-badges/dist/experimental.svg)](http://github.com/hughsk/stability-badges) # + +Safely clone node's +[`fs.Stats`](http://nodejs.org/api/fs.html#fs_class_fs_stats) instances without +losing their class methods, i.e. `stat.isDirectory()` and co. + +## Usage ## + +[![clone-stats](https://nodei.co/npm/clone-stats.png?mini=true)](https://nodei.co/npm/clone-stats) + +### `copy = require('clone-stats')(stat)` ### + +Returns a clone of the original `fs.Stats` instance (`stat`). + +## License ## + +MIT. See [LICENSE.md](http://github.com/hughsk/clone-stats/blob/master/LICENSE.md) for details. diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js new file mode 100644 index 00000000..e797cfe6 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/index.js @@ -0,0 +1,13 @@ +var Stat = require('fs').Stats + +module.exports = cloneStats + +function cloneStats(stats) { + var replacement = new Stat + + Object.keys(stats).forEach(function(key) { + replacement[key] = stats[key] + }) + + return replacement +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json new file mode 100644 index 00000000..f7dc15d9 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/package.json @@ -0,0 +1,39 @@ +{ + "name": "clone-stats", + "description": "Safely clone node's fs.Stats instances without losing their class methods", + "version": "0.0.1", + "main": "index.js", + "browser": "index.js", + "dependencies": {}, + "devDependencies": { + "tape": "~2.3.2" + }, + "scripts": { + "test": "node test" + }, + "author": { + "name": "Hugh Kennedy", + "email": "hughskennedy@gmail.com", + "url": "http://hughsk.io/" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "git://github.com/hughsk/clone-stats" + }, + "bugs": { + "url": "https://github.com/hughsk/clone-stats/issues" + }, + "homepage": "https://github.com/hughsk/clone-stats", + "keywords": [ + "stats", + "fs", + "clone", + "copy", + "prototype" + ], + "readme": "# clone-stats [![Flattr this!](https://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=hughskennedy&url=http://github.com/hughsk/clone-stats&title=clone-stats&description=hughsk/clone-stats%20on%20GitHub&language=en_GB&tags=flattr,github,javascript&category=software)[![experimental](http://hughsk.github.io/stability-badges/dist/experimental.svg)](http://github.com/hughsk/stability-badges) #\n\nSafely clone node's\n[`fs.Stats`](http://nodejs.org/api/fs.html#fs_class_fs_stats) instances without\nlosing their class methods, i.e. `stat.isDirectory()` and co.\n\n## Usage ##\n\n[![clone-stats](https://nodei.co/npm/clone-stats.png?mini=true)](https://nodei.co/npm/clone-stats)\n\n### `copy = require('clone-stats')(stat)` ###\n\nReturns a clone of the original `fs.Stats` instance (`stat`).\n\n## License ##\n\nMIT. See [LICENSE.md](http://github.com/hughsk/clone-stats/blob/master/LICENSE.md) for details.\n", + "readmeFilename": "README.md", + "_id": "clone-stats@0.0.1", + "_from": "clone-stats@~0.0.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js new file mode 100644 index 00000000..e4bb2814 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/node_modules/clone-stats/test.js @@ -0,0 +1,36 @@ +var test = require('tape') +var clone = require('./') +var fs = require('fs') + +test('file', function(t) { + compare(t, fs.statSync(__filename)) + t.end() +}) + +test('directory', function(t) { + compare(t, fs.statSync(__dirname)) + t.end() +}) + +function compare(t, stat) { + var copy = clone(stat) + + t.deepEqual(stat, copy, 'clone has equal properties') + t.ok(stat instanceof fs.Stats, 'original is an fs.Stat') + t.ok(copy instanceof fs.Stats, 'copy is an fs.Stat') + + ;['isDirectory' + , 'isFile' + , 'isBlockDevice' + , 'isCharacterDevice' + , 'isSymbolicLink' + , 'isFIFO' + , 'isSocket' + ].forEach(function(method) { + t.equal( + stat[method].call(stat) + , copy[method].call(copy) + , 'equal value for stat.' + method + '()' + ) + }) +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/package.json new file mode 100644 index 00000000..4ef0f631 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/package.json @@ -0,0 +1,51 @@ +{ + "name": "vinyl", + "description": "A virtual file format", + "version": "0.2.3", + "homepage": "http://github.com/wearefractal/vinyl", + "repository": { + "type": "git", + "url": "git://github.com/wearefractal/vinyl.git" + }, + "author": { + "name": "Fractal", + "email": "contact@wearefractal.com", + "url": "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" + } + ], + "readme": "# 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)\n\n\n## Information\n\n<table>\n<tr> \n<td>Package</td><td>vinyl</td>\n</tr>\n<tr>\n<td>Description</td>\n<td>A virtual file format</td>\n</tr>\n<tr>\n<td>Node Version</td>\n<td>>= 0.9</td>\n</tr>\n</table>\n\n## File\n\n```javascript\nvar File = require('vinyl');\n\nvar coffeeFile = new File({\n cwd: \"/\",\n base: \"/test/\",\n path: \"/test/file.coffee\"\n contents: new Buffer(\"test = 123\")\n});\n```\n\n### constructor(options)\n\n#### options.cwd\n\nType: `String` \nDefault: `process.cwd()`\n\n#### options.base\n\nUsed for relative pathing. Typically where a glob starts.\n\nType: `String` \nDefault: `options.cwd`\n\n#### options.path\n\nFull path to the file.\n\nType: `String` \nDefault: `null`\n\n#### options.stat\n\nThe result of an fs.stat call. See [fs.Stats](http://nodejs.org/api/fs.html#fs_class_fs_stats) for more information.\n\nType: `fs.Stats` \nDefault: `null`\n\n#### options.contents\n\nFile contents.\n\nType: `Buffer, Stream, or null` \nDefault: `null`\n\n### isBuffer()\n\nReturns true if file.contents is a Buffer.\n\n### isStream()\n\nReturns true if file.contents is a Stream.\n\n### isNull()\n\nReturns true if file.contents is null.\n\n### clone()\n\nReturns a new File object with all attributes cloned.\n\n### pipe(stream[, opt])\n\nIf file.contents is a Buffer, it will write it to the stream.\n\nIf file.contents is a Stream, it will pipe it to the stream.\n\nIf file.contents is null, it will do nothing.\n\nIf opt.end is true, the destination stream will not be ended (same as node core).\n\nReturns the stream.\n\n### inspect()\n\nReturns a pretty String interpretation of the File. Useful for console.log.\n\n### relative\n\nReturns path.relative for the file base and file path.\n\nExample:\n\n```javascript\nvar file = new File({\n cwd: \"/\",\n base: \"/test/\",\n path: \"/test/file.coffee\"\n});\n\nconsole.log(file.relative); // file.coffee\n```\n\n[npm-url]: https://npmjs.org/package/vinyl\n[npm-image]: https://badge.fury.io/js/vinyl.png\n[travis-url]: https://travis-ci.org/wearefractal/vinyl\n[travis-image]: https://travis-ci.org/wearefractal/vinyl.png?branch=master\n[coveralls-url]: https://coveralls.io/r/wearefractal/vinyl\n[coveralls-image]: https://coveralls.io/repos/wearefractal/vinyl/badge.png\n[depstat-url]: https://david-dm.org/wearefractal/vinyl\n[depstat-image]: https://david-dm.org/wearefractal/vinyl.png", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/wearefractal/vinyl/issues" + }, + "_id": "vinyl@0.2.3", + "_from": "vinyl@~0.2.1" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/File.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/File.js new file mode 100644 index 00000000..1f2a83a0 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/cloneBuffer.js new file mode 100644 index 00000000..7d286814 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/inspectStream.js new file mode 100644 index 00000000..fe1802c5 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isBuffer.js new file mode 100644 index 00000000..5bb1cb91 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isNull.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isNull.js new file mode 100644 index 00000000..db70c013 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isStream.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/node_modules/vinyl/test/isStream.js new file mode 100644 index 00000000..f22584c5 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/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 diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/package.json b/node_modules/gulp-autoprefixer/node_modules/gulp-util/package.json new file mode 100644 index 00000000..8c5bb404 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/package.json @@ -0,0 +1,58 @@ +{ + "name": "gulp-util", + "description": "Utility functions for gulp plugins", + "version": "2.2.14", + "homepage": "http://github.com/wearefractal/gulp-util", + "repository": { + "type": "git", + "url": "git://github.com/wearefractal/gulp-util.git" + }, + "author": { + "name": "Fractal", + "email": "contact@wearefractal.com", + "url": "http://wearefractal.com/" + }, + "main": "./index.js", + "dependencies": { + "chalk": "~0.4.0", + "lodash.template": "~2.4.1", + "lodash._reinterpolate": "~2.4.1", + "vinyl": "~0.2.1", + "through2": "~0.4.0", + "dateformat": "~1.0.7-1.2.3", + "multipipe": "~0.0.1", + "minimist": "~0.0.5" + }, + "devDependencies": { + "mocha": "~1.17.0", + "should": "~3.1.2", + "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.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/gulp-util/raw/master/LICENSE" + } + ], + "readme": "# gulp-util [![NPM version][npm-image]][npm-url] [![Build Status][travis-image]][travis-url] [![Coveralls Status][coveralls-image]][coveralls-url] [![Dependency Status](https://david-dm.org/gulpjs/gulp-util.png?theme=shields.io)](https://david-dm.org/gulpjs/gulp-util)\n\n## Information\n\n<table>\n<tr> \n<td>Package</td><td>gulp-util</td>\n</tr>\n<tr>\n<td>Description</td>\n<td>Utility functions for gulp plugins</td>\n</tr>\n<tr>\n<td>Node Version</td>\n<td>>= 0.9</td>\n</tr>\n</table>\n\n## Usage\n\n```javascript\nvar gutil = require('gulp-util');\n\ngutil.log('stuff happened', 'Really it did', gutil.colors.cyan('123'));\ngutil.beep();\n\ngutil.replaceExtension('file.coffee', '.js'); // file.js\n\nvar opt = {\n name: 'todd',\n file: someGulpFile\n};\ngutil.template('test <%= name %> <%= file.path %>', opt) // test todd /js/hi.js\n```\n\n### log(msg...)\n\nLogs 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.\n\n```\nvalues (files, module names, etc.) = magenta\nnumbers (times, counts, etc) = cyan\n```\n\n### colors\n\nThis is an instance of [chalk](https://github.com/sindresorhus/chalk)\n\n### date\n\nThis is an instance of [node-dateformat](https://github.com/felixge/node-dateformat).\n\n### linefeed\n\nJust `\\n`. Use this.\n\n### replaceExtension(path, newExtension)\n\nReplaces a file extension in a path. Returns the new path.\n\n### isStream(obj)\n\nReturns true or false if an object is a stream.\n\n### isBuffer(obj)\n\nReturns true or false if an object is a Buffer.\n\n### template(string[, data])\n\nThis 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.\n\n## new File(obj)\n\nThis is just [vinyl](https://github.com/wearefractal/vinyl)\n\n```javascript\nvar file = new gutil.File({\n base: join(__dirname, './fixtures/'),\n cwd: __dirname,\n path: join(__dirname, './fixtures/test.coffee')\n});\n```\n\n## noop()\n\nReturns a stream that does nothing but pass data straight through.\n\n```javascript\ngulp.task('scripts', function() {\n gulp.src('src/**/*.js')\n .pipe(concat('script.js'))\n .pipe(gulp.env.production ? uglify() : gutil.noop())\n .pipe(gulp.dest('dist/');\n});\n```\n\n## combine(streams...)\n\nArgument may also be an array of streams. Returns a function that returns the combined stream. Useful for keeping things DRY. This is a simple wrapper around event-stream's `.pipeline`\n\n```javascript\nvar scripts = gutil.combine(\n coffee({bare: true}),\n uglify(),\n concat('script.js'),\n gulp.dest('dist/')\n);\n\ngulp.task('default', function() {\n gulp.src('*.coffee').pipe(scripts());\n});\n```\n\n## buffer(cb)\n\nThis 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).\n\nReturns a stream that can be piped to.\n\nThe 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.\n\nCallback is optional and receives two arguments: error and data\n\n```javascript\ngulp.src('stuff/*.js')\n .pipe(gutil.buffer(function(err, files){\n \n });\n```\n\n## new PluginError(pluginName, message[, options])\n\n- pluginName should be the module name of your plugin\n- message can be a string or an existing error\n- By default the stack will not be shown. Set `options.showStack` to true if you think the stack is important for your error.\n- If you pass an error in as the message the stack will be pulled from that, otherwise one will be created.\n\nThese are all acceptable forms of instantiation:\n\n```javascript\nvar err = new gutil.PluginError('test', {\n message: 'something broke'\n});\n\nvar err = new gutil.PluginError({\n plugin: 'test',\n message: 'something broke'\n});\n\nvar err = new gutil.PluginError('test', 'something broke');\n\nvar err = new gutil.PluginError('test', 'something broke', {showStack: true});\n\nvar existingError = new Error('OMG');\nvar err = new gutil.PluginError('test', existingError, {showStack: true});\n```\n\n[npm-url]: https://npmjs.org/package/gulp-util\n[npm-image]: https://badge.fury.io/js/gulp-util.png\n[travis-url]: https://travis-ci.org/gulpjs/gulp-util\n[travis-image]: https://travis-ci.org/gulpjs/gulp-util.png?branch=master\n[coveralls-url]: https://coveralls.io/r/gulpjs/gulp-util\n[coveralls-image]: https://coveralls.io/repos/gulpjs/gulp-util/badge.png\n[depstat-url]: https://david-dm.org/gulpjs/gulp-util\n[depstat-image]: https://david-dm.org/gulpjs/gulp-util.png\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/wearefractal/gulp-util/issues" + }, + "_id": "gulp-util@2.2.14", + "_from": "gulp-util@~2.2.12" +} diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/File.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/File.js new file mode 100644 index 00000000..53544075 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/File.js @@ -0,0 +1,46 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +require('mocha'); + +describe('File()', function() { + it('should return a valid file', function(done) { + var fname = path.join(__dirname, './fixtures/test.coffee'); + var base = path.join(__dirname, './fixtures/'); + var file = new util.File({ + base: base, + cwd: __dirname, + path: fname + }); + should.exist(file, 'root'); + should.exist(file.relative, 'relative'); + should.exist(file.path, 'path'); + should.exist(file.cwd, 'cwd'); + should.exist(file.base, 'base'); + file.path.should.equal(fname); + file.cwd.should.equal(__dirname); + file.base.should.equal(base); + file.relative.should.equal('test.coffee'); + done(); + }); + + it('should return a valid file 2', function(done) { + var fname = path.join(__dirname, './fixtures/test.coffee'); + var base = __dirname; + var file = new util.File({ + base: base, + cwd: __dirname, + path: fname + }); + should.exist(file, 'root'); + should.exist(file.relative, 'relative'); + should.exist(file.path, 'path'); + should.exist(file.cwd, 'cwd'); + should.exist(file.base, 'base'); + file.path.should.equal(fname); + file.cwd.should.equal(__dirname); + file.base.should.equal(base); + file.relative.should.equal('fixtures/test.coffee'); + done(); + }); +}); \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/PluginError.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/PluginError.js new file mode 100644 index 00000000..6dc23c0c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/PluginError.js @@ -0,0 +1,70 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +require('mocha'); + +describe('PluginError()', function(){ + it('should print the plugin name in toString', function(done){ + var err = new util.PluginError('test', 'something broke'); + err.toString().indexOf('test').should.not.equal(-1); + done(); + }); + + it('should not include the stack by default in toString', function(done){ + var err = new util.PluginError('test', 'something broke'); + // just check that there are no 'at' lines + err.toString().indexOf('at').should.equal(-1); + done(); + }); + + it('should include the stack when specified in toString', function(done){ + var err = new util.PluginError('test', 'something broke', {stack: "at huh", showStack: true}); + // just check that there are 'at' lines + err.toString().indexOf('at').should.not.equal(-1); + done(); + }); + + it('should take arguments as one object', function(done){ + var err = new util.PluginError({ + plugin: 'test', + message: 'something broke' + }); + err.plugin.should.equal('test'); + err.message.should.equal('something broke'); + done(); + }); + + it('should take arguments as plugin name and one object', function(done){ + var err = new util.PluginError('test', { + message: 'something broke' + }); + err.plugin.should.equal('test'); + err.message.should.equal('something broke'); + done(); + }); + + it('should take arguments as plugin name and message', function(done){ + var err = new util.PluginError('test', 'something broke'); + err.plugin.should.equal('test'); + err.message.should.equal('something broke'); + done(); + }); + + it('should take arguments as plugin name, message, and one object', function(done){ + var err = new util.PluginError('test', 'something broke', {showStack: true}); + err.plugin.should.equal('test'); + err.message.should.equal('something broke'); + err.showStack.should.equal(true); + done(); + }); + + it('should take arguments as plugin name, error, and one object', function(done){ + var realErr = new Error('something broke'); + var err = new util.PluginError('test', realErr, {showStack: true}); + err.plugin.should.equal('test'); + err.message.should.equal('something broke'); + err.showStack.should.equal(true); + done(); + }); + +}); \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/beep.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/beep.js new file mode 100644 index 00000000..e3e71073 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/beep.js @@ -0,0 +1,23 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +require('mocha'); + +describe('beep()', function(){ + it('should send the right code to stdout', function(done){ + var writtenValue; + + // Stub process.stdout.write + var stdout_write = process.stdout.write; + process.stdout.write = function(value) { + writtenValue = value; + }; + + util.beep(); + writtenValue.should.equal('\x07'); + + // Restore process.stdout.write + process.stdout.write = stdout_write; + done(); + }); +}); \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/buffer.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/buffer.js new file mode 100644 index 00000000..6b4de67f --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/buffer.js @@ -0,0 +1,36 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +var es = require('event-stream'); +require('mocha'); + +describe('buffer()', function(){ + it('should buffer stuff and return an array into the callback', function(done){ + var src = [1,2,3]; + var inp = es.readArray(src); + inp.pipe(util.buffer(function(err, data){ + should.not.exist(err); + should.exist(data); + data.should.eql(src); + done(); + })); + }); + it('should buffer stuff and emit it as a data event', function(done){ + var src = [1,2,3]; + var inp = es.readArray(src); + inp.pipe(util.buffer()).on('data', function(data){ + should.exist(data); + data.should.eql(src); + done(); + }); + }); + it('should buffer stuff and return a stream with the buffered data', function(done){ + var src = [1,2,3]; + var inp = es.readArray(src); + inp.pipe(util.buffer()).pipe(es.through(function(data) { + should.exist(data); + data.should.eql(src); + done(); + })); + }); +}); \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/colors.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/colors.js new file mode 100644 index 00000000..970367e2 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/colors.js @@ -0,0 +1,11 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +require('mocha'); + +describe('colors', function(){ + it('should be a chalk instance', function(done){ + util.colors.should.equal(require('chalk')); + done(); + }); +}); \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/combine.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/combine.js new file mode 100644 index 00000000..a54f0012 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/combine.js @@ -0,0 +1,38 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +var es = require('event-stream'); +var Stream = require('stream'); +require('mocha'); + +describe('combine()', function(){ + it('should return a function', function(done){ + var src = [1,2,3]; + var inp = es.readArray(src); + var factory = util.combine(inp); + factory.should.be.type('function'); + done(); + }); + it('should return a function that returns a stream combination', function(done){ + var src = [1,2,3]; + var inp = es.readArray(src); + var inp2 = es.writeArray(function(err, data){ + should.not.exist(err); + data.should.eql(src); + done(); + }); + var factory = util.combine(inp, inp2); + factory().should.be.instanceof(Stream); + }); + it('should return a function that returns a stream combination when given an array', function(done){ + var src = [1,2,3]; + var inp = es.readArray(src); + var inp2 = es.writeArray(function(err, data){ + should.not.exist(err); + data.should.eql(src); + done(); + }); + var factory = util.combine([inp, inp2]); + factory().should.be.instanceof(Stream); + }); +}); \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/date.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/date.js new file mode 100644 index 00000000..21f52ee9 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/date.js @@ -0,0 +1,17 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +require('mocha'); + +describe('date', function() { + it('should be a date format instance', function(done) { + util.date.should.equal(require('dateformat')); + done(); + }); + it('should return today\'s date', function(done) { + var time = new Date(); + var dateutil = util.date('HH:MM:ss'); + dateutil.should.equal(('0' + time.getHours()).slice(-2) + ':' + ('0' + time.getMinutes()).slice(-2) + ':' + ('0' + time.getSeconds()).slice(-2)); + done(); + }) +}); \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/env.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/env.js new file mode 100644 index 00000000..d3942940 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/env.js @@ -0,0 +1,12 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +require('mocha'); + +describe('env', function(){ + it('should exist', function(done){ + should.exist(util.env); + should.exist(util.env._); + done(); + }); +}); \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isBuffer.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isBuffer.js new file mode 100644 index 00000000..ad09bbf5 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isBuffer.js @@ -0,0 +1,16 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +var through = require('through2'); +require('mocha'); + +describe('isBuffer()', function(){ + it('should work on a buffer', function(done){ + util.isBuffer(new Buffer('huh')).should.equal(true); + done(); + }); + it('should not work on a stream', function(done){ + util.isBuffer(through()).should.equal(false); + done(); + }); +}); \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isNull.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isNull.js new file mode 100644 index 00000000..841fc46b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isNull.js @@ -0,0 +1,20 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +var through = require('through2'); +require('mocha'); + +describe('isNull()', function(){ + it('should work on a null', function(done){ + util.isNull(null).should.equal(true); + done(); + }); + it('should not work on a stream', function(done){ + util.isNull(through()).should.equal(false); + done(); + }); + it('should not work on undefined', function(done){ + util.isNull(undefined).should.equal(false); + done(); + }); +}); diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isStream.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isStream.js new file mode 100644 index 00000000..3935324b --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/isStream.js @@ -0,0 +1,16 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +var through = require('through2'); +require('mocha'); + +describe('isStream()', function(){ + it('should work on a stream', function(done){ + util.isStream(through()).should.equal(true); + done(); + }); + it('should not work on a buffer', function(done){ + util.isStream(new Buffer('huh')).should.equal(false); + done(); + }); +}); \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/linefeed.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/linefeed.js new file mode 100644 index 00000000..72f61ca0 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/linefeed.js @@ -0,0 +1,5 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +require('mocha'); + diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/log.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/log.js new file mode 100644 index 00000000..71c6417a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/log.js @@ -0,0 +1,23 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +require('mocha'); + +describe('log()', function(){ + it('should work i guess', function(done){ + var writtenValue; + + // Stub process.stdout.write + var stdout_write = process.stdout.write; + process.stdout.write = function(value) { + writtenValue = value; + }; + + util.log(1, 2, 3, 4, 'five'); + writtenValue.should.eql('['+util.colors.green('gulp')+'] 1 2 3 4 five\n'); + + // Restore process.stdout.write + process.stdout.write = stdout_write; + done(); + }); +}); \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/noop.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/noop.js new file mode 100644 index 00000000..0d75b35c --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/noop.js @@ -0,0 +1,24 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +var es = require('event-stream'); +require('mocha'); + +describe('noop()', function(){ + it('should return a stream', function(done){ + util.isStream(util.noop()).should.equal(true); + done(); + }); + it('should return a stream that passes through all data', function(done){ + var inp = [1,2,3,4,5,6,7,8,9]; + var stream = util.noop(); + es.readArray(inp) + .pipe(stream) + .pipe(es.writeArray(function(err, arr){ + should.not.exist(err); + should.exist(arr); + arr.should.eql(inp); + done(); + })); + }); +}); \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/replaceExtension.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/replaceExtension.js new file mode 100644 index 00000000..b9c65662 --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/replaceExtension.js @@ -0,0 +1,34 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +require('mocha'); + +describe('replaceExtension()', function() { + it('should return a valid replaced extension on nested', function(done) { + var fname = path.join(__dirname, './fixtures/test.coffee'); + var expected = path.join(__dirname, './fixtures/test.js'); + var nu = util.replaceExtension(fname, '.js'); + should.exist(nu); + nu.should.equal(expected); + done(); + }); + + it('should return a valid replaced extension on flat', function(done) { + var fname = 'test.coffee'; + var expected = 'test.js'; + var nu = util.replaceExtension(fname, '.js'); + should.exist(nu); + nu.should.equal(expected); + done(); + }); + + it('should not return a valid replaced extension on empty string', function(done) { + var fname = ''; + var expected = ''; + var nu = util.replaceExtension(fname, '.js'); + should.exist(nu); + nu.should.equal(expected); + done(); + }); + +}); \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/template.js b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/template.js new file mode 100644 index 00000000..7664620a --- /dev/null +++ b/node_modules/gulp-autoprefixer/node_modules/gulp-util/test/template.js @@ -0,0 +1,99 @@ +var util = require('../'); +var should = require('should'); +var path = require('path'); +require('mocha'); + +describe('template()', function(){ + it('should work with just a template', function(done){ + var opt = { + name:'todd', + file: { + path: 'hi.js' + } + }; + var expected = 'test todd hi.js'; + + var tmpl = util.template('test <%= name %> <%= file.path %>'); + should.exist(tmpl); + 'function'.should.equal(typeof(tmpl)); + + // eval it now + var etmpl = tmpl(opt); + 'string'.should.equal(typeof(etmpl)); + etmpl.should.equal(expected); + done(); + }); + + it('should work with a template and data', function(done){ + var opt = { + name:'todd', + file: { + path: 'hi.js' + } + }; + var expected = 'test todd hi.js'; + var tmpl = util.template('test <%= name %> <%= file.path %>', opt); + should.exist(tmpl); + 'string'.should.equal(typeof(tmpl)); + tmpl.should.equal(expected); + done(); + }); + + it('should throw an error when no file object is passed', function(done){ + var opt = { + name:'todd' + }; + try { + var tmpl = util.template('test <%= name %> <%= file.path %>', opt); + } catch (err) { + should.exist(err); + done(); + } + }); + + it('should ignore modified templateSettings', function(done){ + var templateSettings = require('lodash.templatesettings'); + templateSettings.interpolate = /\{\{([\s\S]+?)\}\}/g; + + var opt = { + name:'todd', + file: { + path: 'hi.js' + } + }; + var expected = 'test {{name}} hi.js'; + + var tmpl = util.template('test {{name}} <%= file.path %>'); + should.exist(tmpl); + 'function'.should.equal(typeof(tmpl)); + + // eval it now + var etmpl = tmpl(opt); + 'string'.should.equal(typeof(etmpl)); + etmpl.should.equal(expected); + + done(); + }); + + it('should allow ES6 delimiters', function(done){ + var opt = { + name:'todd', + file: { + path: 'hi.js' + } + }; + var expected = 'test todd hi.js'; + + var tmpl = util.template('test ${name} ${file.path}'); + should.exist(tmpl); + 'function'.should.equal(typeof(tmpl)); + + // eval it now + var etmpl = tmpl(opt); + 'string'.should.equal(typeof(etmpl)); + etmpl.should.equal(expected); + + done(); + }); + +}); \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/package.json b/node_modules/gulp-autoprefixer/package.json new file mode 100644 index 00000000..741dbc3d --- /dev/null +++ b/node_modules/gulp-autoprefixer/package.json @@ -0,0 +1,39 @@ +{ + "name": "gulp-autoprefixer", + "version": "0.0.6", + "description": "Autoprefixer for gulp.", + "license": "MIT", + "author": { + "name": "Michael Ostermann", + "email": "metrime@icloud.com" + }, + "repository": { + "type": "git", + "url": "https://github.com/Metrime/gulp-autoprefixer.git" + }, + "keywords": [ + "gulpplugin", + "css", + "prefix", + "rework" + ], + "dependencies": { + "autoprefixer": "~1.0.20140110", + "bufferstreams": "0.0.1", + "gulp-util": "~2.2.12" + }, + "main": "index.js", + "devDependencies": { + "mocha": "*", + "should": "*", + "event-stream": "~3.1.0" + }, + "readme": "gulp-autoprefixer\n===========\n\n[Autoprefixer](https://github.com/ai/autoprefixer) for [gulp](https://github.com/wearefractal/gulp).\n\n var prefix = require('gulp-autoprefixer');\n\n\nExample\n-------\n \n\tgulp.src('./css/*.css')\n\t.pipe(prefix(\"last 1 version\", \"> 1%\", \"ie 8\", \"ie 7\"))\n\t.pipe(gulp.dest('./dist/'))\n\n\n\nLicense\n-------\n\nMIT\n", + "readmeFilename": "README.md", + "bugs": { + "url": "https://github.com/Metrime/gulp-autoprefixer/issues" + }, + "homepage": "https://github.com/Metrime/gulp-autoprefixer", + "_id": "gulp-autoprefixer@0.0.6", + "_from": "gulp-autoprefixer@" +} diff --git a/node_modules/gulp-autoprefixer/test/test.css b/node_modules/gulp-autoprefixer/test/test.css new file mode 100644 index 00000000..7afc16f8 --- /dev/null +++ b/node_modules/gulp-autoprefixer/test/test.css @@ -0,0 +1,3 @@ +.example{ +background:linear-gradient(bottom,#000,#fff); +} \ No newline at end of file diff --git a/node_modules/gulp-autoprefixer/test/test.js b/node_modules/gulp-autoprefixer/test/test.js new file mode 100644 index 00000000..39d45f3b --- /dev/null +++ b/node_modules/gulp-autoprefixer/test/test.js @@ -0,0 +1,106 @@ +var prefix = require('../'); +var should = require('should'); +var fs = require('fs'); +var autoprefixer = require("autoprefixer"); +var gutil = require('gulp-util'); +var Stream = require('stream'); +var es = require('event-stream'); +require('mocha'); + + +var testfile = fs.readFileSync("./test/test.css","utf8"); + +describe('gulp-autoprefixer', function() { + it('should prefix with defaults', function(done) { + var stream = prefix(); + var fakeFile = new gutil.File({ + contents: new Buffer(testfile) + }); + + + stream.on('data', function(newFile){ + String(newFile.contents).should.equal(autoprefixer.process(testfile).css); + done(); + }); + + + stream.write(fakeFile); + stream.end(); + + }); + + + + + + it('should prefix with options', function(done) { + var stream = prefix("last 1 version", "> 1%", "ie 8", "ie 7"); + var fakeFile = new gutil.File({ + contents: new Buffer(testfile) + }); + + + stream.on('data', function(newFile){ + String(newFile.contents).should.equal(autoprefixer("last 1 version", "> 1%", "ie 8", "ie 7").process(testfile).css); + done(); + }); + + + stream.write(fakeFile); + stream.end(); + + }); + + it('should work the same in stream mode', function(done) { + var stream = prefix(); + var fakeFile = new gutil.File({ + contents: new Stream() + }); + + stream.on('data', function(data) { + data.contents.pipe(es.wait(function(err, data) { + data.should.equal(autoprefixer.process(testfile).css); + done(); + })); + }); + + stream.write(fakeFile); + fakeFile.contents.write(testfile); + fakeFile.contents.end(); + }); + + it('should work the same in stream mode, with options', function(done) { + var stream = prefix("last 1 version", "> 1%", "ie 8", "ie 7"); + var fakeFile = new gutil.File({ + contents: new Stream() + }); + + stream.on('data', function(data) { + data.contents.pipe(es.wait(function(err, data) { + data.should.equal(autoprefixer("last 1 version", "> 1%", "ie 8", "ie 7").process(testfile).css); + done(); + })); + }); + stream.write(fakeFile); + fakeFile.contents.write(testfile); + fakeFile.contents.end(); + }); + + it('should let null files pass through', function(done) { + var stream = prefix(), + n = 0; + stream.pipe(es.through(function(file) { + file.path.should.equal('null.md'); + (file.contents === null).should.be.true; + n++; + }, function() { + n.should.equal(1); + done(); + })); + stream.write(new gutil.File({ + path: 'null.md', + contents: null + })); + stream.end(); + }); +}); \ No newline at end of file diff --git a/package.json b/package.json index 5123f265..49dd0455 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "mocha": "~1.17.1", "gulp-sass": "~0.6.0", "gulp-minify-css": "~0.3.0", - "gulp-imagemin": "~0.1.5" + "gulp-imagemin": "~0.1.5", + "gulp-autoprefixer": "0.0.6" } }